马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
SSH 是 Secure Shell 的缩写,一种网络协议,用来在本地或远程网络上对计算机做远程登录和命令操作。它是 Telnet 的替代者——名字里那个 Secure 就说明了一切:数据在传输过程中是加密的,不再明文裸奔。SSH 现在是最靠谱的远程登录方案,日常最常干的两件事就是远程登录服务器、远程拷贝文件。要用 SSH 连远程机,服务端装 SSH 服务端并起服务,客户端装 SSH 客户端。这篇以 Ubuntu 22.04 为例,把从安装、配置、客户端访问到报错排查整条链路走完。
一、动手前先确认 SSH 在不在
绝大多数主机默认就带了 SSH 客户端。先查版本确认:
ssh -V
注意别被这句骗了:能打印版本号只说明这台机器"能作为客户端连别人",不表示本机跑着 SSH 服务端。两者是两回事。
确认没有再装服务端 OpenSSH Server,装之前先更新软件源:
sudo apt-get update
sudo apt-get install openssh-server
二、服务启停与状态查询
sudo service ssh start # 启动
sudo service ssh stop # 停止
sudo service ssh restart # 重启
sudo service ssh status # 查状态
sudo systemctl status sshd # 更现代的查法
ps -A | grep "ssh" # 看进程
Ubuntu 默认用 UFW 当防火墙,得给 SSH 开口子:
sudo ufw allow ssh
不确定 UFW 有没有开?跑一下 ufw status 就清楚了。云主机的话记得去安全组也开 22 端口,面板安全策略漏了会连不上。
四、设置开机自启
sudo systemctl list-unit-files | grep enabled | grep ssh
没输出就说明没自启,手动开:
sudo systemctl enable ssh
五、配置文件在哪、怎么改
SSH 配置目录在 /etc/ssh/,里面文件一堆,真正要动的是两个:
- ssh_config —— 配的是客户端,定义你每次 SSH 连别人、传文件时套用的规则。
- sshd_config —— 配的是服务端,决定谁能连、谁被拒。
改默认端口
在 sshd_config 里找到 #Port 22,取消注释并改成别的。注意:改了端口,连接时必须带 -p 指定,不然一直连不上,还以为服务挂了。
禁用 root 登录
较新的发行版默认就是"禁止密码登录 root",也就是必须配 SSH 密钥才能 root 连。就算你用密钥连,也不建议开 root 直登——密钥一旦泄露,整台机器就裸了。直接改成 no:
#PermitRootLogin yes → 改成
PermitRootLogin no
改完必须重启
sudo systemctl restart sshd
sudo systemctl status sshd
六、客户端访问:ssh 和 scp
SSH 登录
ssh 用户名@主机IP # 默认 22 端口
ssh 用户名@主机IP -p 2222 # 指定端口,端口自己改过就带 -p
连上输密码即可。想免密就配公钥:ssh-copy-id 用户名@主机IP,之后就不用每次敲密码。
SCP 传文件
SCP(Secure Copy)相当于远端版 cp,跑在 SSH 之上,也是加密的。前提是远端已经装好并启动了 openssh-server。
# 上传:本地 → 远端,传目录必须加 -r,否则报 not a regular file
scp -r /本地文件路径 用户名@主机IP:/目标绝对路径
# 下载:远端 → 本地
scp -r 用户名@主机IP:/目标绝对路径 /本地保存路径
七、两个高频报错
1. auth.log 里刷满 cron 的 session 记录
这条不是错误,只是 cron 定时任务产生的日志 。但它会淹没真正的报错,还白占磁盘,尤其 cron 跑得勤的时候。
在 Debian / Ubuntu 上压掉它:
- 进
/etc/pam.d;
- 编辑
common-session-noninteractive;
- 找到末尾的
session required pam_unix.so;
- 在这一行上方加:
session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid;
- 保存退出,重启 cron:
service cron restart。
2. no matching key exchange method found. Their offer: diffie-hellman-group1-sha1
老客户端连新服务端(或反过来)时算法不匹配。两种解法:
方法一:只给当前用户加配置,vi ~/.ssh/config:
Host *
KexAlgorithms +diffie-hellman-group1-sha1
缺点是只对当前用户生效,换用户就报同样的错。
方法二(推荐):改 /etc/ssh/ssh_config,文件末尾加:
KexAlgorithms diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
然后重载服务:
systemctl restart sshd
sudo systemctl reload sshd
/etc/init.d/sshd restart
改密钥交换算法后务必 reload,不然配置不生效。
3. kex_exchange_identification: read: Connection reset by peer
握手阶段就被对面断了。先看服务端日志 定位——Ubuntu 看 /var/log/auth.log,CentOS 看 /var/log/secure,找连接相关的报错。常见原因:端口不对应的防火墙、SELinux、服务端 sshd 其实没起来、IP 被安全策略拦。
总结
SSH 这条线就四件事:装 openssh-server → UFW 放行 → 编辑 sshd_config(改端口、禁 root)→ systemctl restart sshd。客户端用 ssh 登录、scp -r 传目录。连不上先翻 auth.log,算法不兼容就补 KexAlgorithms。按这个顺序排,基本能自己解决八成问题。
qidao123.com企服评测-应用市场 编辑提示 |