SSH笔记
记录一些ssh连接用到的命令
SSH连接远程服务器
bash
# 直接连接
ssh user@ip
# 特定端口连接
ssh -P 12345 user@ip
创建本机SSH密钥
生成新的密钥
bash
rm -r ~/.ssh
ssh-keygen -t rsa
然后全部选择回车
查看生成好的密钥
bash
cat ~/.ssh/id_rsa.pub
拉取或推送远程文件
bash
# 拉取
scp -r user@ip:/远程文件绝对路径 /本地文件绝对路径
# 推送
scp -r /本地文件绝对路径 user@ip:/远程文件绝对路径
将本地端口基于SSH映射到远程服务器
仅转发端口信息,不进入远程ssh终端
bash
# 非后台运行
ssh -D 10080 -N -C user@ip
# 后台运行
ssh -D 10080 -N -f -C user@ip
查看是否在运行
bash
ps aux | grep ssh
杀死后台运行
bash
pkill -f "ssh -D 10080"
SSH免密连接
首先生成本地的SSH密钥
然后推送到云服务器:
bash
ssh-copy-id user@ip
SSH自动重连
安装autossh:
bash
sudo apt install autossh
自动重连的连接:
bash
autossh -M 0 -D 10080 -N -C -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" user@ip
参数解读:
-o ServerAliveInterval=30: 每 30 秒向服务器发送一次心跳包,防止因空闲被切断
-o ServerAliveCountMax=3: 如果连续 3 次心跳无响应,则认定连接已断开并退出
将其设置为开机自启动
新建服务配置文件
bash
sudo vim /etc/systemd/system/ssh_autotool.service
写入内容:
bash
[Unit]
Description=ssh_autotool
After=network-online.target
# 强制要求网络就绪后再启动
Requires=network-online.target
# 可选:如果用NetworkManager管理网络,添加这个依赖
After=NetworkManager.service
[Service]
User=建立ssh连接的用户名
Environment="AUTOSSH_GATETIME=0"
ExecStartPre=/bin/sleep 5
ExecStart=/usr/bin/autossh -M 0 -D 10080 -N -C -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" user@ip
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
启动配置:
bash
systemctl daemon-reload
systemctl enable ssh_autotool.service
systemctl start ssh_autotool.service