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

Ten*_*ero 4 linux ssh unix shell scp

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

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

ssh username@server
Run Code Online (Sandbox Code Playgroud)

并输入密码。一旦我在那里:

ssh username2@finalhost
Run Code Online (Sandbox Code Playgroud)

并输入另一个密码。

这非常麻烦,特别是在执行scp.时,因为我必须先将文件复制到中间服务器,然后才能将其复制到最终主机。

有没有办法使这个过程自动化,无论是 forssh还是scp命令?

jjl*_*lin 6

如果您有OpenSSH 7.3或更高版本,则可以在 SSH 客户端配置中使用ProxyJump来指定跳转主机。

例如,编辑您的~/.ssh/config并添加

Host finalhost
HostName finalhost.example.com
User username2
ProxyJump username@server
Run Code Online (Sandbox Code Playgroud)

现在ssh finalhost还是scp file.txt finalhost:.应该通过跳转主机。

  • @Tendero ProxyJump 不存储密码,它通过中间(“跳转”)主机自动执行连接过程。所以你运行类似`ssh finalhost`或`scp localsource finalhost:destination`的东西,它会自动*通过*跳转主机连接到最终主机。但它仍会提示您输入两个密码。如果您想避免密码提示,最好的选择是使用[公钥认证](https://www.ssh.com/ssh/public-key-authentication) 而不是存储密码。 (3认同)
  • @Tendero Public-key auth 确实需要在服务器上安装一个公钥(并在您的客户端上匹配私钥)。您至少可以在中间主机上执行此操作并保存一个密码条目吗?不安全地存储服务器密码(例如在脚本中)的想法让我很受伤,所以看看 jjlin 提到的 [sshpass](https://sourceforge.net/projects/sshpass/) 选项。 (2认同)