我正在尝试将我的多跳 ssh 命令放入 ssh .ssh/config 文件中。
这是我的连接图:笔记本电脑(我在这里)------>用户服务器------->工作站
我已将 ssh 公共 rsa 密钥放入“userver”和“workstation”中。此时我可以通过输入以下行进行连接:
ssh -A -t userserver@userver ssh -A userworkstation@workstation
但是,我希望能够使用 ~/.ssh/config 中的配置文件的功能来达到相同的效果,但使用一个简单的命令,这也允许我使用“scp”进行快速复制。唯一的问题是“userver”没有“nc”命令,而且我在那里没有超级用户,只能控制我的主文件夹。尽管如此,我还是尝试了一些方法:
我的笔记本电脑中有这个配置文件(〜/ .ssh / config):
# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user
用户版本中还有另一个配置文件(~/.ssh/config)
# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username
使用此配置文件我可以连接
ssh -A -t userver ssh -A workstation
这是一个改进,但还不够。我尝试在笔记本电脑配置中添加另一个主机,如下所示:
Host hop
ProxyCommand ssh -A -t userver ssh -A workstation
然后,当我这样做
ssh hop
我收到以下带有错误的输出并且无法连接:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found
有任何想法吗?
答案1
您需要的命令是ProxyCommand
。
您应该将以下行放入您的 .ssh/config 文件中:
Host userver
HostName userver.example.com
.........
Host workstation
ProxyCommand ssh -q userver nc -q0 workstation 22
现在您可以通过以下方式连接到 PC 工作站
ssh worksation
如果这不清楚,或者你想要更多细节,我建议你阅读这个出色的介绍到 ssh 多跳。
编辑:
您随时可以定义别名:在您的 /home/your_name/.bashrc 文件中,添加以下行:
alias ssh_workstation='ssh -A -t userver ssh -A -X workstation'
(我插入了该-X
选项,以便您可以在远程服务器上运行图形应用程序,并在本地查看它们;如果您不想要这个,只需删除-X
)。
答案2
我发现以下解决方案比使用 netcat () 效果好得多,nc
如另一个示例所示。使用 netcat 时,我的连接非常慢,并且会反复挂起,直到我按下某些键。另外,您不需要安装 netcat。
将以下内容添加到您的~/.ssh/config
:
Host *
ServerAliveCountMax 4
ServerAliveInterval 15
Host workstation
Hostname workstation
User userworkstation
ProxyCommand ssh userserver@userver -W %h:%p
然后你可以像这样 ssh:
ssh workstation
ProxyCommand
还请注意,您的命令不起作用的原因是您没有得到该命令的ProxyCommand
作用。 ProxyCommand
必须创建一个可以建立 SSL 连接的管道ssh
。换句话说,该命令必须启动一个进程,该进程标准输入和标准输出连接ssh
到sshd
端口。在您的配置中,您正在建立一个 ssh 连接,ProxyCommand
该连接连接ssh
到命令 shell,而不是连接到端口sshd
。
答案3
使用相同的用户名从服务器 A ssh 进入服务器 B
Host target
HostName <serverB_hostname>
ForwardX11Trusted yes
LogLevel verbose
User <username>
ProxyCommand ssh <username>@<serverA_hostname> -W %h:%p