首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个服务器的SSH [访问被拒绝]

多个服务器的SSH [访问被拒绝]
EN

Unix & Linux用户
提问于 2018-11-22 17:57:24
回答 3查看 788关注 0票数 2

我需要编写一个脚本,通过ssh从家里远程连接到我的大学服务器,然后从服务器终端ssh远程连接到虚拟机来处理一些数据。这个是可能的吗?

这就是我迄今尝试过的:

代码语言:javascript
复制
#!/usr/bin/expect
set login "myuser"
set addr "test.ac.uk"
set addr2 "t002"
set pw "mypassword"

spawn ssh -o StrictHostKeyChecking=no $login@$addr 
expect "$login@$addr\'s password:"
send "$pw\r"
expect "#"
spawn ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22
expect "$login@$addr2\'s password:"
send "$pw\r"
expect "#"
send "cd /developer\r"
interact

错误:ssh:连接到主机t002端口22:连接被拒绝

这就是我目前在家中成功手动登录的方式:

代码语言:javascript
复制
~/Desktop # ssh host

提示输入密码。

一旦成功登录。

代码语言:javascript
复制
-bash-4.2$ ssh user@t002

提示再次输入密码。

编辑:我按照Mike的建议更新了第二行ssh。

发自:

代码语言:javascript
复制
spawn ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22

至:

send "ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22\r"

现在,脚本返回拒绝访问,但同时它确实将我登录到服务器,而不是虚拟机。

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2018-11-22 22:15:48

这是一个常见的问题,您希望访问的服务器不能直接从外部internet访问,但它可以从公开公开的中间主机访问。(中间主机称为jumpbox。)

由于这个问题非常常见,所以OpenSSH很自然地会提供方便的方法来简化对jumpboxes (或jumpboxen?)的操作。有两种方式,一种旧的方式和一种新的方式。旧的方法仍然有效,但是新的方法更直观,并且对在jumpbox上可用的应用程序做了更少的假设。

使用问题中提到的示例机器,可以这样做:

代码语言:javascript
复制
ssh -o StrictHostKeyChecking=no -o ProxyJump=myuser@test.ac.uk myuser@t002

或者,与-o ProxyJump=myuser@test.ac.uk不同,我认为-W myuser@test.ac.uk是等价的。

无论哪种方法,该方法都需要一个足够新的OpenSSH版本。如果你被旧版本困住了,你需要做这样的事情:

代码语言:javascript
复制
ssh -o StrictHostKeyChecking=no -o ProxyCommand='ssh myuser@test.ac.uk "nc %h %p"' myuser@t002

旧的方法假设你在跳投箱上安装了netcat。

新方法的另一个好处是您不需要在jumpbox上保留私钥。ProxyJump非常聪明,可以尝试使用本地拥有的私钥。因此,如果跳投箱被破坏,它就不需要破坏跳投箱后面的任何东西。

现在,你可能会厌倦每次写那么长的命令。使用ssh越多,就越需要设置$HOME/.ssh/config。这是一个文件,您可以为远程主机提供别名,并将特定配置与这些主机相关联。

对于您的示例,ssh_config的设置如下所示:

代码语言:javascript
复制
Host jumpbox
User myuser
Hostname test.ac.uk
StrictHostKeyChecking=no

Host t002
User myuser
StrictHostKeyChecking=no
ProxyJump jumpbox

在配置就绪之后,您现在应该能够使用一个简单得多的命令登录到t002:

代码语言:javascript
复制
ssh t002

还有很多其他很酷的东西可以用ssh_config来做。通过man ssh_config查看一下,并在您了解有关ssh的更多信息时,不时地重新访问它。你会不断发现更多你能做的很酷的事情:)

设置ssh配置的示例介绍演练是https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/

票数 3
EN

Unix & Linux用户

发布于 2018-11-22 18:20:01

我只需要在脚本中使用一个命令来减少输入,然后输入用户cred!

代码语言:javascript
复制
#!/bin/bash
ssh -o StrictHostKeyChecking=no myuser@test.ac.uk 'ssh -o StrictHostKeyChecking=no myuser@t002'

根据你的需要量身定做。

代码语言:javascript
复制
ssh -o StrictHostKeyChecking=no myuser@test.ac.uk 'ssh -tt -o StrictHostKeyChecking=no myuser@t002'

将密钥从第一台服务器复制到您的pc并引用如下所示:

代码语言:javascript
复制
ssh -o StrictHostKeyChecking=no myuser@test.ac.uk 'ssh -tt -o StrictHostKeyChecking=no -i /ssh/1stserverkey myuser@t002'
票数 1
EN

Unix & Linux用户

发布于 2018-11-22 19:43:38

你生了一个新的ssh。尝试:

代码语言:javascript
复制
send "ssh -o StrictHostKeyChecking=no $login@$addr2 -p 22\r"
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/483504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档