OpenSSH 完全指南

一:概述二:sshd三:ssh1. 远程连接2. 远程执行3. 文件解读

四:sshpass五:sftp六:总结

一:概述

OpenSSH是一套基于 SSH(Secure Shell)协议 的开源工具,用于安全地远程管理计算机和传输数据。它通过加密通信防止窃听、连接劫持等攻击,是 Linux/Unix 系统和网络管理中不可或缺的核心工具。

核心组件

sshd

SSH 服务端守护进程,监听 22 端口,处理连接请求。配置文件:/etc/ssh/sshd_config。 ssh

SSH 客户端工具,用于连接远程主机。示例:ssh user@host -p 22。 辅助工具

ssh-keygen:生成密钥对(RSA/ECDSA/Ed25519)。ssh-copy-id:自动部署公钥到远程主机。scp/sftp:加密文件传输。

二:sshd

核心配置文件

/etc/ssh/sshd_config

优化配置

vim

[root@nfs01 ~]# vim /etc/ssh/sshd_config

# 连接加速

UseDNS no

GSSAPIAuthentication no

# 安全优化

Port 22

PermitRootLogin yes

sed + cat

# 注释掉 sshd 服务端指定的已有的配置

[root@nfs01 ~]# sed -ri.bak '/^(UseDNS|GSSAPIAuthentication|Port|PermitRootLogin)/s@^@#@g' /etc/ssh/sshd_config

# 重新配置连接优化、端口、是否准许 root 的远程登录

[root@nfs01 ~]# cat >> /etc/ssh/sshd_config << EOF

UseDNS no

GSSAPIAuthentication no

Port 22

PermitRootLogin yes

EOF

参数详解

连接加速描述UseDNS no是否开启反向解析: ip -> 域名或主机名GSSAPIAuthentication noGSS 认证功能关闭安全优化描述Port 22默认是Port 22 端口范围 1-65535 推荐 1w 以上的端口PermitRootLogin yes禁用root用户远程登录权限,默认是yes(可以让root远程登录)(ubuntu 系统中默认是no)使用建议:先添加普通用户配置sudo 权限,然后再禁用。

三:ssh

1. 远程连接

核心:将自身生成的公钥发送给目标机器,这样就可以免密登录目标机器了

创建密钥对

-t 指定加密算法

[root@web01 ~]# ssh-keygen -t rsa

分发公钥

将 id_rsa.pub 发送到目标主机的 ~/.ssh/authorized_keys

-i:指定公钥文件路径

[root@web01 ~]# ssh-copy-id root@web02

免密登录

-p:指定端口(默认22)

-o StrictHostKeyChecking=no:首次连接时,SSH 会将目标主机的公钥保存到 ~/.ssh/known_hosts,以便后续验证。

添加该选项之后虽然跳过了确认,但不会将密钥记录到 known_hosts,因此下次连接仍然不会验证主机身份(相当于每次连接都当作“首次”)

[root@web01 ~]# ssh web02

2. 远程执行

案例一

远程连接到 jack 用户 backup 主机的 22 端口并执行命令,不切换主机

[root@nfs01 ~]# ssh -p 22 jack@backup hostname

hadoop107

案例二

远程连接到 jack 用户 backup 主机的 22 端口并执行多条命令,不切换主机

[root@hadoop108 ssh]# ssh nfs01 hostname && pwd && ll

3. 文件解读

id_rsa:执行完 ssh-keygen -t rsa 生成的私钥id_rsa.pub:执行完 ssh-keygen -t rsa 生成的公钥authorized_keys:执行完 ssh-copy-id root@web02 后,在web02 上的 ~/.ssh 目录下生成,存储允许远程登录到当前服务器的用户公钥known_hosts:当前主机用户的信任远程主机列表

四:sshpass

是一个用于 非交互式SSH密码认证 的命令行工具,允许在脚本或命令行中直接传递密码给SSH/SCP/SFTP,无需手动输入或依赖密钥对

安装

yum install -y sshpass

非交互式登录

密码泄露风险:命令行中的密码可能被ps或history捕获。

sshpass -p '密码' ssh user@host

彻底关闭 yes/no 提示

当第一次用 SSH 连接一台新服务器时,看到这个提示。这其实是 SSH 在说:“我从未见过这个服务器,你确定要信任它吗?”

部分作用sshpass -p '密码'自动填充 SSH 密码(避免交互式输入)ssh-copy-id将本地公钥(默认 ~/.ssh/id_rsa.pub)添加到远程主机的 ~/.ssh/authorized_keys-o StrictHostKeyChecking=no跳过首次连接时的主机密钥确认(自动接受新主机的指纹)

sshpass -p '密码' ssh-copy-id -o StrictHostKeyChecking=no user@host

五:sftp

是一种基于SSH(Secure Shell)的安全文件传输协议,用于在客户端和服务器之间加密传输文件

上传

# 文件

put /local/file /remote

# 文件夹

put -r /local/dir /remote/dir

下载

# 文件

get /remote/file /local

# 文件夹

get -r /remote/dir /local/path

常用命令

作用于本地的话则在命令前加 l

命令示例lsls /tmpcdcd /var/wwwllslls ~/Downloadslcdlcd /home/userexit/byeexit

六:总结

本文系统介绍了 OpenSSH 的核心功能与应用场景,涵盖以下关键内容:

OpenSSH 概述

开源安全的远程管理工具,替代 Telnet/FTP 等明文协议。

核心组件:sshd(服务端)、ssh(客户端)、scp/sftp(文件传输)、ssh-keygen(密钥管理)。

sshd 服务端

配置 /etc/ssh/sshd_config 强化安全性(如禁用密码登录、限制 root 访问)。

日志监控与端口管理(默认 22 端口可自定义)。

ssh 客户端

远程连接:ssh user@host -p 端口,支持密钥/密码认证。

远程执行:ssh user@host “command” 实现批量操作。

配置文件解读:~/.ssh/config 简化连接参数(别名、跳板机配置)。

sshpass 工具

非交互式密码输入(需谨慎使用,存在安全风险)。 sftp 安全文件传输

加密替代 FTP,支持交互式命令和脚本化操作。

核心价值:

🔐 提供端到端加密,保障数据安全。

⚡ 高效管理远程服务器、传输文件、调试服务。

🛠️ 灵活适应自动化运维(Ansible/Jenkins 集成)。

适合读者:运维工程师、开发人员、网络安全从业者。