配置
安装
# apt
sudo apt install openssh-server
# apk
sudo apk add openssh
命令
开启服务
sudo service ssh start
# 开机自启
sudo service ssh enable
停止服务
sudo service ssh stop
重启服务
sudo service ssh restart
# 或者
sudo systemctl restart sshd
生成密钥
ssh-keygen -t rsa -b 4096 -C "邮箱"
提示输入文件保存位置(默认是~/.ssh/id_rsa)和密钥密码(可选)
生成密钥后在根目录(/root/或/home/用户名)下生成.ssh目录
graph LR;
S(.ssh目录)
S-->A(authorized_keys)-->A1(存储其他主机公钥)
S-->B(id_rsa)-->B1(本机私钥)
S-->C(id_rsa.pub)-->C1(本机公钥)
S-->D(know_hosts)-->D1(存储已认证主机host key)
清除密钥
ssh-keygen -R 远程主机IP
配置文件
/etc/ssh/sshd_config
禁用密码登陆(可选)
禁用密码后只能通过密钥进行SSH连接, 可避免密码被破译风险
修改配置项如下
# 禁用密码认证
PasswordAuthentication no
# 启用公钥认证(通常是默认启用)
PubkeyAuthentication yes
# 允许挑战响应认证(如果不需要也可以禁用)
ChallengeResponseAuthentication no
# 还可考虑禁用GSSAPI认证(如果不需要)
GSSAPIAuthentication no
操作
连接
密码连接
默认20端口
ssh 用户名@远程主机IP
- 示例, 连接192.168.1.128 dmjcb用户, 默认20端口号
指定端口
ssh 用户名@远程主机IP -p 端口
密钥连接
手动复制
手动将本地id_rsa.pub
复制到远程主机.ssh/authorized_keys
里
命令行上传
若是windows系统, 需powershell中额外执行,
function ssh-copy-id([string]$userAtMachine, $args){
$publicKey = "$ENV:USERPROFILE" + "/.ssh/id_rsa.pub"
if (!(Test-Path "$publicKey")){
Write-Error "ERROR: failed to open ID file '$publicKey': No such file"
} else {
& cat "$publicKey" | ssh $args $userAtMachine "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"
}
}
之后windows或linux终端执行
ssh-copy-id -i 公钥路径(一般是.ssh/id_rsa.pub) 用户名@远程主机IP
- 示例, 设置密钥连接192.168.1.128
长连接
保持SSH长期连接, 有两种方法
服务器修改
sudo nano /etc/ssh/sshd_config
# server每隔60秒发送一次请求给client, 然后client响应, 从而保持连接
ClientAliveInterval 60
# server发出请求后, 客户端没有响应得次数达到3, 就自动断开连接, 正常情况下, client不会不响应
ClientAliveCountMax 3
重启服务
sudo service ssh restart
添加参数
client端连接时添加ServerAliveInterval
ssh -o ServerAliveInterval=60 用户名@远程主机IP
远程操作
远程执行指令
ssh 用户名@远程主机IP '命令'
- 示例, 远程执行
ls -l
文件传输
SCP(Secure Copy)是SSH一个内置命令, 用于本地和远程机器之间传输文件
上传
scp 本地路径 (-r, 表示目录) 用户名@远程主机IP:远程路径
- 示例, 上传本地self_assets目录到远程
下载
scp 用户名@远程主机IP:远程路径 本地路径
- 示例, 下载远程文件
转发
端口转发
通过SSH可以进行端口转发, 将本地机器上端口映射到远程机器上, 或者将远程机器上端口映射到本地机器上
本地端口转发
ssh -L本地端口:目标地址:目标端口 用户名@远程主机IP
远程端口转发
ssh -R远程端口:目标地址:目标端口 用户名@远程主机IP
动态端口转发
ssh -D本地端口 用户名@远程主机IP
X11转发
SSH支持X11转发, 可在远程机器上运行图形化程序, 并在本地机器上显示
ssh -X 用户名@远程主机IP