问题现象
新购的 Linode 海外服务器,发现无法通过 ssh 登录。显示错误:
ssh: connect to host x.x.x.x port 22: Resource temporarily unavailable
而通过另外一台可以登录的 DigitalOcean 的海外服务器,在那台服务器上是可以通过 ssh 登录上去的。
看来是这台 Linode 服务器的 IP 之前被人建站用过,IP 已经被国内的密码机构墙了。
这就很蛋疼了,总不能每次都通过另一台服务器上进行操作吧,主要是网络也不太好,在上面敲命令也很卡。
我想是否可以通过什么工具或者命令,可以直接在本地 ssh 上那台被墙的服务器,也许操作就没那么卡顿了。
ssh 命令
ssh username@目标机IP -J username@跳板机IP
执行时,首先会要求输入跳板机的登录密码,然后再提示输入目标机的登录密码。
如果想省去输入密码只需要
- 将本地的 ~/.ssh/id_rsa.pub 文件内容,复制到跳板机的 ~/.ssh/authorized_keys 文件中。
- 然后,将跳板机的 id_rsa.pub,复制到目标机的 authorized_keys 中。这里的理解应该是错误的,因为我换到了另一个电脑,这个电脑的 pub key 在跳板机上,但是不在目标服务器上,依然需要输入密码。所以,应该是当前主机的 pub key 需要在目标主机上。(为了省事,可以把跳板机和本机的 pub key 都复制到目标主机中)
使用这个命令,就可以直接登录到目标服务器了。省去了很多麻烦。
然后这个这个 ssh 命令保存到一个 shell 脚本,就可以一键登录了。
注意:如果不把跳板机的 id_rsa.pub 复制到目标机,则会报错:
kex_exchange_identification: Connection closed by remote host
-J 参数说明
通过 man ssh 可以看到 -J 参数的说明:
-J destination
Connect to the target host by first making a ssh connection to the jump host described by destination and then establishing a TCP forwarding to the ultimate destination from there. Multiple jump hops may be specified separated by comma characters. This is a shortcut to specify a ProxyJump configuration directive. Note that configuration directives supplied on the command-line generally apply to the destination host and not any specified jump hosts. Use ~/.ssh/config to specify configuration for jump hosts.
~/.ssh/config
虽然我看推荐使用 ssh config 文件来设置 proxy host,但是我感觉不如 shell 脚本保存更简洁直观。
参考
https://mp.weixin.qq.com/s/FS3RpNYl0TbF400gGckekA
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式