文科生 / 网管 / 看书写字 / 动漫 / 不爱国

SSH 使用技巧

2018.04.20

用用 ~/.ssh/config 这个配置文件能极大提高工作效率。

SSH 使用密钥认证

ssh-keygen -C "hipkomh@gmail.com"  
    # -C 后面是备注,一般用邮箱,或者姓名+公司等其他标识
    # 默认路径在 ~/.ssh/id_rsa,注意不要覆盖自己的
ssh-copy-id -i path/to/keyfile user@remotehostname -p port
    # ssh-copy-id 用途是把公钥添加到远程主机用户目录.ssh/authorized_key文件里

SSH client config文件

➜ ~ cat ~/.ssh/config

Host *                                             # 用 * 对所有主机生效
  ControlPersist yes                               # 复用之前的连接
  ControlMaster auto
  ControlPath /tmp/ssh_%h_%p                       # socks文件存放目录
  Compression yes                                  # 压缩传输数据
  StrictHostKeyChecking no                         # 检查远程主机指纹是否一致
  HashKnownHosts no                                # .ssh/known_hosts文件里记录的值不进行哈希
                                                   # /etc/ssh/ssh_config 里有更多配置项

Host jumpserver                                    # 定义主机别名,ssh hk-node 即可登录
  HostName 39.xx.x.84                              # 主机ip地址
  User root                                        # 用户名,默认为当前用户
  IdentityFile ~/.ssh/id_rsa_2019                  # 指定私钥,默认~/.ssh/id_rsa

Host prod-env
  HostName 172.21.0.6                              # 注意这里写了个内网ip
  User root
  IdentityFile ~/.ssh/id_rsa_2019
  ProxyJump jumpserver                             # 使用跳板机,这里也可以用主机别名


Host alauda-*                                      # 对 Host 是 alauda-开头的主机适用
  IdentityFile ~/.ssh/alauda/id_rsa.alauda         # 定义这组机器的key
  User alauda                                      # 定义这组机器的用户名
Host alauda-master
  HostName 54.xxx.181.xxx
  Port 5022                                        # 自定义端口
Host alauda-node
  HostName 52.xx.91.xx

以上示例基本演示了配置文件的常用情况,其实ProxyJump 参数较新的 openssh 才有,旧版可使用ProxyCommand,格式为:ProxyCommand="ssh -W %h:%p root@jumpserver"

这里定义的在跳板机后的节点( 使用 ProxyJump ),可以直接被 scp 使用!例如——

scp ~/Desktop/oooo.sh prod-env:/root/

Ansible使用 ssh 跳板机

➜ ~ cat ~/playbook/inventory/master

[cluster]
  master        ansible_host=10.224.1.20
  node          ansible_host=10.224.1.21
                 # 使用别名定义 master 组内机器
[cluster:vars]   
  ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p root@jumpserver"'
  ansible_ssh_private_key_file=~/.ssh/id_rsa_2019
                 # 定义 master 组机器使用的变量
                 # ansible_ssh_* 是内置变量,下面是指定跳板机和key
                 # 可以直接调用 ~/.ssh/config 文件里定义的主机别名
                 # 使用时删掉包含 # 的所有行

其他特性和变量还有很多,如有需要请参考ansible和ssh官方手册。

SSH隧道

ssh -ND localhost:1090 hk-jumpserver   # hk-jumpserver 在 ~/.ssh/config 文件中定义

配合 privoxy 、proxychains 实现命令行工具的代理;

浏览器配合 SwitchyOmega 插件,将特别的网站转向 socks5 localhost:1090 Enjoy~