ssh
为什么需要 SSH ?
传统的互联网通信使用明文传输数据,内容一旦被截获就会完全暴露,存在很多安全隐患。
SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。
SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。
SSH 如何工作?
密钥登录过程
连接请求:客户端向远程服务器发送连接请求。连接请求中包含用户的身份信息和使用的密钥对。
密钥验证:服务器收到连接请求后,会检查客户端发送的公钥是否与服务器上已授权的密钥匹配。如果匹配,则向客户端发送一个加密的随机挑战。
挑战响应:客户端收到加密挑战后,先使用服务器的公钥解密,得到其中的随机数,再使用私钥对其进行签名,并将签名后的挑战响应发送回服务器。
验证签名:服务器收到用户的挑战响应后,使用之前存储的公钥对响应进行解密,如果解密后的结果与之前发送的随机挑战匹配,则认证成功。
会话建立:一旦认证成功,远程服务器会建立一个安全的SSH会话,允许用户在该会话中执行命令和操作。
制作密钥对
ssh-keygen -t rsa
ssh 密钥登录服务器
1. 在服务器上添加公钥
cat ~/.ssh/id_rsa.pub # 复制密钥
cat "<密钥>" >> ~/.ssh/authorized_keys
注意:
authorized_keys
文件权限需设为644
,否则可能无法登录
2. ssh 打开密钥登录功能
编辑 /etc/ssh/sshd_config
,添加如下内容
RSAAuthentication yes
PubkeyAuthentication yes
重启 ssh 服务
systemctl restart sshd
ssh-copy-id 脚本
ssh-copy-id 是一个用来复制 SSH 密钥到指定服务器的脚本。
ssh-copy-id -i identity_file user@host
上面命令中,-i 参数用来指定公钥文件,user 是所要登录的账户名,host 是服务器地址。如果省略用户名,默认为当前的本机用户名。执行完该命令,公钥就会拷贝到服务器。
注意,公钥文件可以不指定路径和 .pub 后缀名,ssh-copy-id 会自动在 ~/.ssh
录里面寻找。
ssh 常用命令
1. 从某主机的80端口开启到本地主机2001端口的隧道
ssh -L 2001:localhost:80 user@host
2. 比较远程和本地文件
ssh user@host cat /path/to/remotefile | diff /path/to/localfile –
3. 通过SSH挂载目录/文件系统
sshfs user@host:/path/to/directory /path/to/mountpoint
4. 通过中间主机建立SSH连接
ssh -t reachable_host ssh unreachable_host
5. 通过SSH连接屏幕
ssh -t remote_host screen –r
6. 端口检测(敲门)
knock <host> 3000 4000 5000 && ssh -p <port> user@host && knock <host> 5000 4000 3000
References
[1] Tinywan, Linux系列 | SSH 如何使用密钥登录服务器
[2] Hostinger, What Is SSH: Understanding Encryption, Ports and Connection
[3] Huawei, 什么是SSH?
[4] alifrank, 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录 和ssh常用命令