使用man ssh查看ssh命令,使用man ssh_config查看ssh_config配置。
ssh 从三个地方分别获取配置内容:
- 命令行参数
- 用户设置文件(~/.ssh/config)
- 系统设置文件(/etc/ssh/ssh_config)
每一处,都只会选取第一个匹配的值。(config 文件内 host 匹配一次后,就不在读取后续 host 规则)
server 端添加 ssh 公钥
- 方法一
1 | # ~/.ssh/id_rsa.pub 为公钥的本地地址 |
- 方法二
1 | # MacOS |
批量添加
使用shell的数组以及遍历,完成批量添加。
- 同步等待
1 | array=(121.41.71.210 121.40.212.247 121.41.66.178 121.41.71.210 121.40.212.247 121.41.66.178 120.27.212.127 121.43.168.191 121.43.162.33 121.40.224.210 121.40.70.93 47.99.236.146 121.40.224.210 121.40.70.93 47.99.236.146) |
keep-alive
参考资料:ssh-keep-alive
- 服务器端主动
1 | vim /etc/ssh/sshd_config |
- 客户端主动
1 | # 类似 |
配置以上配置后,ssh每隔30s向server端sshd发送keep-alive包,如果发送60次,server无回应断开连接。server端配置类似。
验证私钥
- 使用 shell 返回码验证
1 | ssh -q user@downhost exit |
目前问题:没有更简单,可以用来在脚本方面使用的方法
1 | ssh root@47.99.236.142 -T |
- GitHub 以及 GitLab
1 | ssh -T git@github.com |
指纹查询
1 | # 不同的指纹方式 |
- 私钥反查公钥
1 | # 通过私钥,查询出公钥内容 |
GitHub 用户公钥
访问 https://api.github.com/users/:username/keys 将 :username 替换为用户名。
在脚本中使用 ssh,并执行命令
1 | # ssh 成功后,在对应主机执行 command |
-tt 强制分配伪终端
MacOS 下,异步执行多个命令
1 | osascript -e 'tell app "Terminal" |
查看登陆日志
1 | # server 端 |
更换端口,关闭密码
1 | vim /etc/ssh/sshd_config |
SSH PasswordAuthentication vs ChallengeResponseAuthentication 14 Sep 2013
配置完成后,需要重启 ssh 服务才能生效
重启 ssh 服务
1 | #RHEL/CentOS系统 |
代理
ssh 不走 shell 的环境变量代理,需要在sshconfig中自行配置。同时,通过ssh进行连接的工具,也需要在ssh_config中配置。
git
git clone地址为git@github.com或者ssh协议的连接,都是走ssh的。
scp
scp source targettarget可以使用ssh_config的Host配置。
远程编辑文件
1 | vim scp://<remote-host>/<file-path> |
scp会将文件拷贝至tmp文件处,然后由vim在本地编辑。
不过目前看下来,反应比较慢。
端口转发
内容未验证
- 端口转发命令
1 | ssh [-L address] [user@]hostname [command] |
将remote-host的22端口,通过jump-server转发到本地(运行这条命令的机器)的2222端口。所有对本地2222端口的请求,都会通过jump-server转发至remote-host的22端口。
[-R address]参数和[-L address]刚好相反,等验证完成后,分别写一遍。
尝试解释:
[-L address]只是连接过程中的一个可选参数,host:hostport是由remotehost进行解析的,port是client端的 port。
跳板机
client –>> jump-server –>> target-server
通过ssh_config可以隐藏跳板机命令,大大简化执行时命令的复杂度。
1. 跳板机作为网络中转
跳板机本身,不存任何内容,之所以需要跳板机,只是为了绕过网络连接的限制(target只开放内网访问)。
1 | Host target |
- 总结
像往常一样配置两个服务器。需要跳板机的机器,额外加一个ProxyCommand ssh -W %h:%p jump 就可以。
- ssh 命令参数
-W host:port:将所有client上的标准输入和标准输出,转发至host的port端口。自动设置-N, -T, ExitOnForwardFailure and ClearAllForwardings四个选项,如果需要修改以上设置,可以通过-o,或者在config中配置。
ProxyJump 命令
proxyjump 能够实现相同效果。
1 | Host target |
注意,该功能,需要比较新的 ssh client 客户端支持。
2. 跳板机才有 target key
ssh-from-a-through-b-to-c-using-private-key-on-b
ssh-agent
1 | 需要先在本地启动 ssh-agent,有的已经默认启动。 |
1 | Host target |
这种跳板模式,会把跳板机中的
ssh key信息加入到当前机器的ssh-agent中,退出后仍然存在,会存在一定影响。
可以使用
ssh-add -l查看已添加私钥,使用ssh-add -D删除ssh-agent中所有私钥,使用ssh-add -d删除特定。
- 示例
1 | ssh target |
SSH Agent
相关命令:ssh-add,ssh-agent
Agent-forwarding 携带 ssh key 信息
Using SSH agent forwarding
SSH-Agent-Forwarding
在服务器上,使用本地 ssh key 进行操作。
1 | # config |
完整操作
1 | 启动 ssh-agent macOS 不一定需要 |