Linux 体系 SSH 和 SCP 服务器搭建、配置、访问以及出现的问题

[复制链接]
发表于 2026-10-3 11:02:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

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 上压掉它:

  1. 进 /etc/pam.d;
  2. 编辑 common-session-noninteractive;
  3. 找到末尾的 session required pam_unix.so;
  4. 在这一行上方加:session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid;
  5. 保存退出,重启 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企服评测-应用市场 编辑提示

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表