简介
SSH是安全shell的缩写,提供加密传输访问远程服务器的功能。 SSH几乎是所有类似UNIX系统远程登入的方式,当前的Windows 10/11 已经集成了SSH客户端可选组件。 SSH同时支持者scp、git、https、vpn等很多应用。
用法
-
直接使用
- ssh 用户名@目标主机:端口
- 用户名和当前用户名相同可省略
- 目标主机可以是ip或域名
- 端口默认22可不写
-
配置密钥访问
- 生成密钥对 ssh-keygen
- 拷贝公钥到目标主机 ssh-copy-id
- 配置使用的密钥对
-
端口转发
- 本地转发 LocalForward
- -L [本地主机:]本地主机端口:远程网络主机:远程网络主机端口
- 例如
ssh -L 0.0.0.0:30000:host2:8000 user@host1
- 这条命令将host2的8000端口映射到本地的30000端口前提是待登录主机host1上可以正常连接到host2的80端口
- 远程转发 RemoteForward
- -R [登录主机:]登录主机端口:本地网络主机:本地网络主机端口
- 例如
ssh -R 0.0.0.0:8080:host2:80 user@host1
- 这条命令将host2的80端口映射到待登录主机host1的8080端口前提是本地主机可以正常连接host2的80端口
- 动态转发 DynamicForward
- -D [本地主机:]本地主机端口
ssh -D 0.0.0.0:50000 user@host1
- 这条命令创建了一个SOCKS代理(默认127.0.0.1)通过该SOCKS代理发出的数据包将经过host1转发出去
- 本地转发 LocalForward
-
专门复制文件
- scp [-4/-6] [-r] [-P 端口号] 源地址 目的地
- 范例
scp -r 文件夹 user@1.2.3.4:~
scp -6 -P 22 文件 user@[I:P::v:6]:~
配置文件
客户端
- 文件位置
- 默认在
~/.ssh/config
- Windows/Linux/MacOS同样
- 默认在
- 有一些公共配置
- HashKnownHosts 散列记住的主机信息,默认
yes
,建议no
以便于手工维护known_hosts
文件
- HashKnownHosts 散列记住的主机信息,默认
- 每个服务器各是一段配置,常用配置项目如下
- Host 服务器简称
- User 登陆用户名,默认当前用户名
- Hostname 服务器地址
- Port 服务器端口,默认22
- IdentityFile 需要使用的密钥,相对路径从执行命令的位置为基准
- LocalForward 端口转发本地
- RemoteForward 端口转发远端
- ProxyCommand 应用代理额外命令
- 范例
|
|
服务端
- 文件位置
- 类Unix系统通常在
/etc/ssh/sshd_config
- Windows系统一般不使用SSH,而是RDP远程桌面。
- 类Unix系统通常在
- 配置项
- 文件中有详细的注释和范例
- 不建议修改服务端的配置
技巧
- 查看服务器公钥指纹
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
- 首次连接一台服务器的时候会询问是否接受公钥,显示的指纹可以通过这条命令查看。
- 核对指纹可以避免中间人攻击。
- 通过socks5代理
ssh -o ProxyCommand='nc -x 127.0.0.1:1080 %h %p' my_server
- 开启socks5代理并显示连接信息
ssh -v -D 1080 my_server