SSH远程连接服务
一、SSH 原理图
二、SSH 原理描述
2.1:什么是SSH
SSH是专门为了远程登录会话和其他网络服务提供的安全性协议,使用SSH协议可以有效的防止远程连接会话的时候出现信息泄密,在数据传输的时候SSH会先对联机的数据包通过加密技术进行加密处理,加密后在进行数据的传输,确保了传输中的安全性,SSH服务主要提供两个服务功能:一个是远程联机的SSH服务,一个是借助SSH协议来传输数据的SFTP服务
2.2:SSH原理阐述
① 服务端开启ssh服务监听22端口
② 客户端发送联机请求(携带IP和端口)
③ 客户端服务端进行联机加密认证
④ 认证通过联机成功
2.3:SSH的两种认证方式
① 基于密码口令的认证
② 基于秘钥的安全认证
2.4:SSH认证类型阐述
基于密码口令的方式:
基于密码的安全认证就是我们一直在用的,只要知道服务器的SSH连接账号和密码(当然也要知道服务器的IP和端口(默认22)),就可以通过客户端远程登录到主机了,所以的传输过程都是加密的
基于秘钥的安全认证:
① 运行SSH服务,生成密钥对
② 客户端发送公钥到服务端(通过ssh-copy-id或者其他的方式)
③ 客户端发送连接请求
④ 服务端进行对密钥的验证
⑤ 验证成功服务端将用公钥加密质询,发送给客户端
⑥ 客户端用自己的私钥解密质询
⑦ 客户端将解密后的质询发送给服务端
⑧ 服务端验证质询
⑨ 验证通过,建立连接
2.5:SSH联机加密过程原理阐述
① SSH服务端先生成一个1024-bit的公钥
② 客户端发送请求
③ 服务端把公钥发给客户端
④ 客户端生成256-bit的私钥,并且和服务端发过来的公钥进行整合
⑤ 客户端把整合的秘钥对发给服务端
⑥ 使用秘钥对进行联机
PS:SSH2版本中为了修补SSH1中不验证整合秘钥对的漏洞,加入了一个确认联机正确性的Diffie-Hellman机制(每次联机都会进行秘钥对的校验)
三、SSH 搭建部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 安装 ssh 服务 yum -y install openssh openssl 启动服务 systemctl start sshd 配置文件 tree /etc/ssh/ /etc/ssh/ ├── moduli ├── ssh_config 客户端配置文件 ├── sshd_config 服务端配置文件 ├── ssh_host_ecdsa_key ├── ssh_host_ecdsa_key.pub ├── ssh_host_ed25519_key ├── ssh_host_ed25519_key.pub ├── ssh_host_rsa_key └── ssh_host_rsa_key.pub 使用 基于密码的连接 ssh root@192.168.163.129 也可以之家连接执行命令 ssh root@192.168.163.130 ifconfig ens33 |
四、SSH 企业级优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 在SSH 配置文件中有很多项是可以做优化的 vim /etc/sshd_config Port #默认22端口,修改其他端口 ListenAddress # 指定特定的监听地址 PermitEmptyPasswords # 是否允许密码为空的用户远程登录,默认为no PermitRootLogin # 是否允许root登录,默认yes,改为no安全些 UseDNS # dns解析,默认yes 要改为no 提高速度 GSSAPIAuthentication # 解决linux之间使用远程连接慢的问题 快速更改优化方法使用 sed 命令 \ cp /etc/ssh/sshd_config {,.bak} sed -i 's%#Port 22%Port 56666%' /etc/ssh/sshd_config sed -i 's%#PermitEmptyPasswords no%PermitEmptyPasswords no%' /etc/ssh/sshd_config sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config sed -i 's%#UseDNS yes%UseDNS no%' /etc/ssh/sshd_config sed -i 's%GSSAPIAuthentication yes%GSSAPIAuthentication no%' /etc/ssh/sshd_config a=$( ifconfig | awk -F [ " " :]+ 'NR==2{print $3}' ) | sed -i 's%#ListenAddress 0.0.0.0%ListenAddress ' $a ' %' /etc/ssh/sshd_config egrep "UseDNS|GSSAPIAuthentication|PermitRootLogin|PermitEmptyPasswords|ListenAddress|Port" /etc/ssh/sshd_config 一条命令搞定 a=$( ifconfig | awk -F [ " " :]+ 'NR==2{print $3}' ) | sed -ir '13 iPort 56666\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no\nListenAddress ' $a '' /etc/ssh/sshd_config 重启服务 systemctl restart sshd |
五、SSH 扩展(非交互式功能)
5.1:expect
5.2:sshpass
5.3:pssh
六、SSH 总结
① SSH是安全加密协议,用于远程连接linux服务器
② SSH默认端口是22,安全协议版本是SSH2,除了SSH2还有SSH1,但是1有漏洞
③ SSH服务端只要包含两个服务,一个是SSH一个是SFTP
④ Linux SSH 客户端包含ssh远程连接命令,以及远程scp命令等
⑤ SSH配置文件的优化很重要,可以提高服务器的安全性,也可以提高远程连接的速度
七、SSH 错误及解决办法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | 首先、确保server端的 ssh 服务是开的(service shhd start) 然后在client端输入: ssh usrname@serverip (远程登录) scp filename usrname@serverip: /URL (远程传输) 常出现的问题: 问题一 ssh 登录的时候链接端口失败 提示(1): # ssh 192.168.***.** ssh : connect to host 192.168.***.** port 22: No route to host 这由于server端没有开机或是网络不通(这个原因很多,最简单的是网线没有插。还有就是可能会是网卡down了等)如果是网卡down了ifup相应的网卡再试试 提示(2): # ssh zhou@192.168.***.** ssh : connect to host 192.168.***.** port 22: Connection refused 这是由于对方server的 ssh 服务没有开。这个server端开启服务即可。 如何开启 ssh 服务呢? 首先确保要登录的主机安装了openssh-client(ubuntu有默认安装,如果没有则 sudo apt-get install openssh-client),如果要使本机开放SSH服务就需要安装 openssh-server sudo apt-get install openssh-server 然后确认sshserver是否启动了: ps -e | grep ssh 如果看到sshd那说明 ssh -server已经启动了。 如果没有则可以这样启动: sudo /etc/init .d /ssh start ssh -server配置文件位于/ etc /ssh/sshd_config ,在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。 然后重启SSH服务: sudo /etc/init .d /ssh stop sudo /etc/init .d /ssh start 然后使用以下方式登陆SSH: ssh zhou@192.168.***.** zhou为192.168.***.**机器上的用户,需要输入密码。 断开连接: exit 问题二、 ssh 到server上的时候密码是对的但是报如下信息: # ssh 192.168.***.** root@192.168.***.**'s password: Permission denied, please try again. 这个是由于如果不输入用户名的时候默认的是root用户,但是安全期间 ssh 服务默认没有开root用户的 ssh 权限 解决方法: 要修改root的 ssh 权限,即修改 /etc/ssh/sshd_config 文件中 PermitRootLogin no 改为 PermitRootLogin yes 问题三 登录是出现如下提示: ssh root@192.168.***.** @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now ( man - in -the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 76:fb:b3:70:14:48:19:d6:29:f9:ba:42:46:be:fb:77. Please contact your system administrator. Add correct host key in /home/fante/ . ssh /known_hosts to get rid of this message. Offending key in /home/fante/ . ssh /known_hosts :68 RSA host key for 192.168.***.** has changed and you have requested strict checking. Host key verification failed. server端密码或是其他发生改变的时候。 解决方法一般就需要删除~/. ssh /known_hosts 的东西,然后再登录即可。 |
-------------------------------------------
个性签名:在逆境中要看到生活的美,在希望中别忘记不断奋斗
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
也可以关注我的微信公众号,不定时更新技术文章(kubernetes,Devops,Python)等

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性