lab*_*irc 11 networking linux ssh
我正在尝试将我的多跳 ssh 命令放入 ssh .ssh/config 文件中。
这是我的连接图:笔记本电脑(我在这里)------> 用户-----> 工作站
我已将 ssh 公共 rsa 密钥放入“userver”和“workstation”。此时,我可以通过键入以下行进行连接:
ssh -A -t userserver@userver ssh -A userworkstation@workstation
Run Code Online (Sandbox Code Playgroud)
然而,我希望能够使用 ~/.ssh/config 中配置文件的功能来达到相同的效果,但使用一个简单的命令,这也允许我使用“scp”进行快速复制。唯一的问题是“userver”没有“nc”命令,而且我没有超级用户,只能控制我的主文件夹。不过,我尝试了一些事情:
我的笔记本电脑中有这个配置文件(~/.ssh/config):
# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user
Run Code Online (Sandbox Code Playgroud)
还有用户中的另一个配置文件(~/.ssh/config)
# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username
Run Code Online (Sandbox Code Playgroud)
有了这个配置文件,我可以连接为
ssh -A -t userver ssh -A workstation
Run Code Online (Sandbox Code Playgroud)
这是一种改进,但还不够。我尝试在我的笔记本电脑配置中添加另一个主机,如下所示:
Host hop
ProxyCommand ssh -A -t userver ssh -A workstation
Run Code Online (Sandbox Code Playgroud)
然后,当我做
ssh hop
Run Code Online (Sandbox Code Playgroud)
我得到以下错误输出并且无法连接:
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
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
jco*_*and 11
我发现以下解决方案比nc在另一个示例中使用 netcat ( )要好得多。使用 netcat 时,我的连接速度非常慢,并且会反复挂起,直到我按了一些键。此外,您不需要安装 netcat。
将以下内容添加到您的~/.ssh/config:
Host *
ServerAliveCountMax 4
ServerAliveInterval 15
Host workstation
Hostname workstation
User userworkstation
ProxyCommand ssh userserver@userver -W %h:%p
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样ssh:
ssh workstation
Run Code Online (Sandbox Code Playgroud)
另请注意,您ProxyCommand不工作的原因是因为您没有得到什么ProxyCommand。 ProxyCommand必须创建一个ssh可以建立 SSL 连接的管道。换句话说,该命令必须启动一个进程,其stdin和stdout连接ssh到一个sshd端口。在您的配置中,您正在建立一个 ssh 连接,ProxyCommand用于连接ssh到命令外壳而不是sshd端口。
您需要的命令是ProxyCommand.
您应该将这些行放入您的 .ssh/config 文件中:
Host userver
HostName userver.example.com
.........
Host workstation
ProxyCommand ssh -q userver nc -q0 workstation 22
Run Code Online (Sandbox Code Playgroud)
现在您可以通过以下方式连接到PC工作站
ssh worksation
Run Code Online (Sandbox Code Playgroud)
如果这还不清楚,或者你想了解更多细节,我建议你阅读这篇关于 ssh 多跳的优秀介绍。
编辑:
您始终可以定义别名:在您的 /home/your_name/.bashrc 文件中,添加以下行:
alias ssh_workstation='ssh -A -t userver ssh -A -X workstation'
Run Code Online (Sandbox Code Playgroud)
(我已插入该-X选项,以便您可以在远程服务器上运行图形应用程序,并在本地查看它们;如果您不想要这个,只需删除-X)。