当前位置:首页 > 知识

openssh是什么软件

```html OpenSSH是软件什么软件

OpenSSH是什么软件

OpenSSH是一套用来替代明文远程登录工具(比如telnet、rlogin)的软件加密网络连接工具集。它最核心的软件部件是ssh客户端和sshd服务端,但远不止这两个程序。软件你每天敲的软件ssh user@host、传文件的软件scp、同步目录的软件rsync(走ssh通道时)、甚至git push到GitHub,软件背后都可能是软件OpenSSH在干活。

很多人第一次接触它是软件在Linux终端里。输入ssh 192.168.1.10,软件回车,软件然后要么输密码,软件要么用密钥直接进去。软件整个过程看起来简单,软件但协议本身不简单。SSH协议经历了两个大版本,SSH-1早就被证明有安全缺陷,现在默认全是SSH-2。OpenSSH从1999年 OpenBSD 项目里分出来,目的就是让加密登录变得免费、干净、可审计。当时Tatu Ylönen写的原始SSH已经开始限制自由使用,OpenSSH相当于一个开源复刻加改进版。

它到底包含哪些东西

你装完openssh-client或openssh-server,会看到一堆命令。最常用的几个:

  • ssh — 远程登录,或者执行单条命令,比如ssh host "uptime"。
  • scp — 基于ssh的文件拷贝,语法像cp,但走网络。不过现在更多人用rsync -e ssh或sftp。
  • sftp — 交互式文件传输,像ftp但加密。
  • ssh-keygen — 生成密钥对。我见过有人用了五年ssh还在输密码,就是因为没碰过这个命令。
  • ssh-agent和ssh-add — 免密登录的钥匙串管理,配合密钥转发能省很多事。
  • sshd — 服务端守护进程,监听22端口(默认),处理所有进来的连接。

还有一个容易被忽略的:ssh-keyscan和ssh-copy-id。后者一键把公钥丢到远程主机的~/.ssh/authorized_keys里,比手动cat追加省心。我第一次手动配密钥时,权限搞错了,authorized_keys被设成777,sshd直接拒绝读取,查了半天日志才发现。这种细节就是OpenSSH的风格——安全优先,宁可连不上也不放行。

为什么它成了事实标准

几乎每个Linux发行版默认装OpenSSH客户端,服务器版默认装服务端。macOS自带,Windows 10之后也内置了OpenSSH客户端,甚至能装服务端。GitHub、GitLab、各种云主机的登录方式,底层全是它。你如果用过AWS的EC2,连接实例时下载的那个.pem文件,就是OpenSSH格式的私钥。

它不只是“远程登录工具”。端口转发功能让很多人拿它当轻量级VPN用。ssh -L 8080:localhost:80 user@remote把远程的80端口映射到本地8080,调试内网服务特别方便。ssh -D 1080开一个SOCKS代理,浏览器配一下就能加密上网。还有ssh -R反向隧道,把内网机器暴露到公网,临时演示时很好使。

配置文件也值得说。~/.ssh/config可以给每台机器起别名、指定密钥、端口、跳板机。比如:

Host db HostName 10.0.0.5 User admin IdentityFile ~/.ssh/id_ed25519_db ProxyJump bastion 

然后直接ssh db就行,不用记IP和参数。这个文件用好了,效率提升很明显。我自己的config里存了二十多个条目,有些是客户环境,有些是测试机。

安全上的几件事

默认配置下,OpenSSH禁止root直接登录(PermitRootLogin prohibit-password),禁止空密码,只允许协议2。但很多人的服务器被暴力破解,不是因为OpenSSH有漏洞,而是因为没改端口、没禁密码认证、没装fail2ban。我扫过一些公网IP的22端口,日志里每分钟几十次尝试,用户名从admin到oracle到test,字典跑得飞起。

建议就三条:用密钥登录,关掉PasswordAuthentication,改个非标准端口(能挡掉大部分脚本小子)。再进一步可以限制用户、限制来源IP、用AllowUsers白名单。这些在/etc/ssh/sshd_config里改,改完systemctl reload sshd,别restart,免得把自己踢下线。

版本更新也重要。OpenSSH每年发一两个小版本,偶尔修CVE。比如2024年那个regreSSHion(CVE-2024-6387)影响8.5p1到9.7p1,远程代码执行,虽然利用条件苛刻,但该升级还是得升。ssh -V看一眼版本,太老就更新。

最后说个冷知识:OpenSSH的默认端口22,是IANA分配给SSH的。但你可以让它监听多个端口,或者只监听内网地址。配置文件里ListenAddress写几行就行。我见过有人把sshd绑在127.0.0.1上,然后通过其他隧道访问,也算一种偏执的安全策略。

```

分享到: