我想从我的个人计算机访问某个主机,但我必须先访问中间服务器,因为从公共互联网上看不到最终目的地。
问题是,我必须执行以下操作才能访问最终主机。从我的电脑:
ssh username@server
然后输入密码。进入后:
ssh username2@finalhost
并输入另一个密码。
这非常麻烦,特别是在执行时scp
,因为我必须先将文件复制到中间服务器,然后才能将其复制到最终主机。
有没有办法可以使这个过程自动化,无论是命令ssh
还是scp
程序?
答案1
如果你有OpenSSH 7.3或更高版本,您可以使用代理跳转在您的 SSH 客户端配置中指定跳转主机。
例如,编辑您的~/.ssh/config
并添加
Host finalhost
HostName finalhost.example.com
User username2
ProxyJump username@server
现在ssh finalhost
还是scp file.txt finalhost:.
应该通过跳转主机。
答案2
这里是 ~/.ssh/config 的一个简短块,可以执行该操作(即使对于旧的 ssh 版本):
Host server
User username
Host finalhost
User username2
ProxyCommand ssh server -W %h:%p
您声明了 2 个主机,即中间服务器和最终主机。使用以下命令可直接通过 ssh 连接到服务器:用户和主持人在配置中提供。与 finalhost 的连接将按照配置中指定的在服务器上执行跳转代理命令线。
两个神奇的参数%H和%p用于转发当前主机 = finalhost 和当前端口 = 22(默认)
其次,为了防止你每次连接到这些机器时都输入密码,你可以使用ssh-复制-id命令:
ssh-copy-id server
<type server password for the last time>
ssh-copy-id finalhost
<type finalhost password for the last time>
为了实现此功能,你需要先使用以下方法生成公钥-私钥对:ssh-keygen。您可以检查它们是否已经存在于 ~/.ssh 文件夹中(id_rsa.pub 和 id_rsa)