ssh 的正确使用方法
做了快3年多开发,结合最近的情况,总结下,一些可以提升生产力的正确使用姿势。
private key
很多时候 我们都是通过 ssh root@xx.xx.xx.xx
登陆服务器,然后手输密码。
但其实不论从方便性或者从安全性来说,用公私钥登录服务器更好。
ubuntu 的话 自带 ssh-copy-id
的工具可以帮助在远程 server 里添上自己的公钥,只要在这次输一次密码,以后都不用输密码。
mac的话 默认没有,可以自己弄一个简化版的
1 | ~ ᐅ cat /usr/local/bin/ssh-copy-id |
ssh configfile
如果每次登录都要输入ip,那么如果你要登录的服务器超过100的话很难想象如何记住这么多ip.
但其实可以通过 ssh config file 帮助给你的服务器添加别名
man的官方解释
1 | -F configfile |
根据man 可以知道 *nux 在 /etc/ssh/ssh_config 有一份默认配置, cp 到 自己的 ~/.ssh/config 下作为自己的配置
然后 添加方式如下
1 | Host vps5 |
然后可以通过 ssh vps5
登录服务器
proxy jump hosts
一般公司的线上环境都是一个独立的内网环境,需要先登录 一台跳转机,然后跳转到内部机器。
我们自然也是可以 一键 直接进入内部机器。
下面是将vps3 作为gateway,访问vps5。
注: 需要在vps3 上 可以用默认privatekey 登录vps5
1 | ssh -o ProxyCommand="ssh -W %h:%p vps3" vps5 |
或者
1 | ssh -tt vps3 ssh -tt vps5 |
Openssh 不同的版本支持可能不同,具体可以参考 下面referer 的wiki
这个不仅仅用于跳转机。我自己的vps3 在日本,vps5在美国,通过vps3 做代理可以让我访问更顺畅。
proxy transport file
既然可以代理登录,那就可以代理传文件了。
scp 是一个基于ssh 的 remote copy program (from man)
所以 可以沿用 ssh config ~/.ssh/id_rsa
由于文件比较大,所以需要选择更合适的 加密方式,以及压缩,以便提高效率,举个例子
1 | Host proxyed_vps5 |
当然也可以先配置一个 vps3
再配置一个 vps5
然后 ProxyCommand 里面就不用 -c -C -i 这种了
这里我配置了一个 vps5的代理,将vps3 作为 网关。
在 ProxyCommand
里面 配置gateway 的选项: 表示通过 root 和 本地 秘钥 通过 -C
启用压缩 -c blowfish
blowfish 加密效率更高 (ps: 压缩挺费cpu的)
在 ssh_options 里面 用 Compression Cipher 代替。
-W
官方解释
stdio forwarding (-W) mode to "bounce" the connection through an intermediate host.
%h
%p
分别是 HostName
和 Port
上面的2个 IdentityFile 都在本机。
看一下效果:
1 | ~/Documents/xxx ᐅ scp -r proxyed_vps5:download/xxx-319 ./ |
还有 rsync 同理。
当scp 下载到一般 发现代理慢了,那么可以将scp停掉,用rsync 换代理断点续传
1 | rsync -z -r --partial --progress --rsh=ssh vps5:download/xxx-319.mp4 ./ |
还有,既然能2层,就能 3 层,这是个递归,具体参考 wiki
插曲
之所以会研究下载是因为最近发现,迅雷太恶心了,不但下载速度没以前快,还强制嵌入了一个浏览器。
然后发现国外vps 下载bt 速度非常快,一半1,2G 的 大小,10分钟左右就能下完。于是就找到了这个方法。
ps,如果下载的是 mp4 格式的话,如果前置头 的话,是可以实现scp 边传边播的功能, 毕竟scp 是顺序传输的。。。
reference
https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts#ProxyCommand_with_Netcat