使用密码自动化多跳 SSH 和 SCP

使用密码自动化多跳 SSH 和 SCP

我想从我的个人计算机访问某个主机,但我必须先访问中间服务器,因为从公共互联网上看不到最终目的地。

问题是,我必须执行以下操作才能访问最终主机。从我的电脑:

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)

相关内容