首页 > 代码库 > Linux SSH 连接不上的各种联想

Linux SSH 连接不上的各种联想


一、CentOS之SSH的安装与配置


SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组

(Network Working Group)所制定SSH 为建立在应用层和传输层基础上的安全协议


传统的网络服务程序,如FTP、POP和Telnet其本质上都是不安全的

因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击

存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器


而 SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止

远程管理过程中的信息泄露问题。透过 SSH 可以对所有传输的数据进行加密,也能够防止 DNS 欺骗和 IP 欺骗


安装SSH

[root@test1 ~]# yum install ssh

启动SSH

[root@test1 ~]# service sshd start

设置开机运行

[root@test1 ~]# chkconfig sshd on


SSH相关配置文件的修改


首先修改SSH的配置文件,用vim打开SSH的配置文件,如下:


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

#Protocol 2,1                              ← 找到此行将行头“#”删除,再将行末的“,1”删除,只允许SSH2方式的连接
 ↓
Protocol 2                                  ← 修改后变为此状态,仅使用SSH2

#ServerKeyBits 768                    ← 找到这一行,将行首的“#”去掉,并将768改为1024
 ↓
ServerKeyBits 1024                    ← 修改后变为此状态,将ServerKey强度改为1024比特

#PermitRootLogin yes                 ← 找到这一行,将行首的“#”去掉,并将yes改为no
 ↓
PermitRootLogin no                   ← 修改后变为此状态,不允许用root进行登录

#PasswordAuthentication yes       ← 找到这一行,将yes改为no
 ↓
PasswordAuthentication no          ← 修改后变为此状态,不允许密码方式的登录

#PermitEmptyPasswords no   ← 找到此行将行头的“#”删除,不允许空密码登录
 ↓
PermitEmptyPasswords no     ← 修改后变为此状态,禁止空密码进行登录


然后保存并退出


因为我们只想让SSH服务为管理系统提供方便,所以在不通过外网远程管理系统的情况下

只允许内网客户端通过SSH登录到服务器,以最大限度减少不安全因素


修改屏蔽规则,在文尾添加相应行,设置方法如下:


[root@test1 ~]# vim /etc/hosts.deny

# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the ‘/usr/sbin/tcpd’ server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!

sshd: ALL                                                ← 添加这一行,屏蔽来自所有的SSH连接请求


[root@test1 ~]# vim /etc/hosts.allow          ← 修改允许规则,在文尾添加相应行

#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the ‘/usr/sbin/tcpd’ server.
#

sshd: 192.168.0.                                       ← 添加这一行,只允许来自内网的SSH连接请求


在修改完SSH的配置文件后,需要重新启动SSH服务才能使新的设置生效

[root@test1 ~]# service sshd restart

Stopping sshd:                                            [  OK  ]

Starting sshd:                                              [  OK  ]


这时,在远程终端(自用PC等)上,用SSH客户端软件以正常的密码的方式是无法登录服务器的

为了在客户能够登录到服务器,我们接下来建立SSH用的公钥与私钥,以用于客户端以“钥匙”的方式登录SSH服务器


SSH2的公钥与私钥的建立:


登录为一个一般用户,基于这个用户建立公钥与私钥

[root@test1 ~]# su - test1

[root@test1 ~]$ ssh-keygen -t rsa                                      ← 建立公钥与私钥
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kaz/.ssh/id_rsa):  ← 钥匙的文件名,这里保持默认直接回车
Created directory ‘/home/kaz/.ssh’
Enter passphrase (empty for no passphrase):                       ← 输入口令
Enter same passphrase again:                                            ← 再次输入口令
Your identification has been saved in /home/kaz/.ssh/id_rsa.
Your public key has been saved in /home/kaz/.ssh/id_rsa.pub.
The key fingerprint is:

tf:rs:e3:7s:28:59:5s:93:fe:33:84:01:cj:65:3b:8e centospub@sample.centospub.com


然后确认一下公钥与密钥的建立,以及对应于客户端的一些处理


[root@test1 ~]$ cd ~/.ssh                                                           ← 进入用户SSH配置文件的目录

[root@test1 ~]$ ls -l                                                                  ← 列出文件
-rw——- 1 centospub centospub 951 Sep 4 19:22 id_rsa                ← 确认私钥已被建立
-rw-r–r– 1 centospub centospub 241 Sep 4 19:22 id_rsa.pub           ← 确认公钥已被建立

[root@test1 .ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  ← 公钥内容输出到相应文件中

[root@test1 .ssh]$ rm -f ~/.ssh/id_rsa.pub                                    ← 删除原来的公钥文件

[root@test1 .ssh]$ chmod 400 ~/.ssh/authorized_keys                   ← 将新建立的公钥文件属性设置为400


然后,将私钥通过安全的方式转移到欲通过SSH连接到服务器的PC上。这里,以通过3.5寸磁盘为介质为例:

[root@test1 .ssh]$ exit                                                               ← 退出一般用户的登录(返回root的登录)

[root@test1 ~]# mount /mnt/floppy/                                            ← 加载软盘驱动器

[root@test1 ~]# mv /home/centospub/.ssh/id_rsa /mnt/floppy/        ← 将刚刚建立的私钥移动到软盘

[root@test1 ~]# umount /mnt/floppy/                                          ← 卸载软盘驱动器


二、比较流行的几款SSH客户端工具


作为一个Windows操作系统用户,如果想要连接Linux服务器来进行文件之间的传送

那么需要一个Secure Shell软件(简称SSH的)实际上,SSH是一个网络协议,允许通过网络连接到Linux

和Unix服务器;SSH使用公钥加密来认证远程的计算机。通常有多种途径使用SSH,自动连接或是使用密码认证登录

Putty

Putty是最有名的SSH和telnet客户端,由Simon Tatham为Windows平台开发

Putty是一款开源软件,提供可用的源代码并有一批志愿者进行开发和支持

技术分享

Putty易于安装和使用,通常大部分的配置选项不需要修改

用户只需要输入少量基本的参数,就可以开始很简单地建立连接会话

SecureCRT

SecureCRT这款SSH客户端软件同时具备了终端仿真器和文件传输功能

技术分享

FileZilla

FileZilla 是 Windows 上使用最多的免费 ftp 客户端。它是一款遵循 GNU 公共许可证发布的开源软件

FileZilla 客户端支持多种平台(Windows、Linux 及 Mac)作为 FTP Server,FileZilla 只提供 Windows 版本

由于 Filezilla 是开源软件,因此高级用户可以根据自己的需要查看源码并进行修改

对所有用户,FileZilla 让免费、强大和易用的文件传输成为可能

喜欢图形界面的用户可以轻易地凭感觉就学会使用

FileZilla 不支持 CLI(命令行界面)

FileZilla 支持 FTP、SSL/TLS 加密的 FTP(FTPS)和 SSH FTP(SFTP)

用户可以利用它们进行可靠的安全文件传输


FileZilla 有很多有意思的特性,包括支持文件续传和大文件(>4G)传输

当然还有很多其它特性让 FileZilla 成为用户数最多的客户端

比如:支持 ipv6、支持拖拽操作、支持 http、socks5和 ftp-proxy

支持远程文件编辑以及很多其它很有意思的特性

FileZilla 操作非常灵活且易于使用,可以同时发送、接收多个文件

如今,这些特性已经让 FileZilla 被公认为是最强大的文件传输工具

WinSCP

WINSCP 是一款 Windows 平台的免费开源 FTP 客户端。WinSCP 不提供 ftp server 版本

支持的传输协议有 FTP、SFTP 和 SSH,同时也支持 SCP(安全拷贝协议)

WinSCP 的图形化用户界面为终端用户提供了直觉化的界面,因而更易于使用

同时 WinSCP 也为习惯了终端操作的用户提供了强大的命令行界面

WinSCP 的脚本和自动化特性使得任务自动化成为可能

同时也支持拖拽文件进行传输,还有其他的 Windows 集成特性

例如桌面、快捷启动图标,文件浏览器的“发送到”菜单等等

WinSCP 在其它操作系统上没有提供类似的功能


XShell


首先解释一下XShell这款工具,它可以用来远程操控Linux系统

所以我们可以在Windows系统中,安装这个软件用来打开Linux终端


下面来介绍一下XShell的安装和配置过程:


1.新建一个会话

技术分享


2.在连接这里填上用户名和主机,协议为SSH,其余默认


技术分享


这里解释一下主机IP,它是虚拟机中Linux的IP地址

所以我们可以通过如下方法获取:在CentOS的终端中输入ifconfig命令,可以查出IP地址如下图所示


技术分享


3.在用户身份认证这里输入用户名就行,其他默认


4.点击确定按钮之后,出现下图的对话框,点击连接


技术分享


5.这里会弹出一个对话框,点击接受并保存


技术分享


那么这个会话就创建好了

我们可输入命令df来查看Linux的分区状态

确定一下我们连接的是不是我们期望的Linux系统


技术分享


注意:如果创建出来的会话出现乱码状态,那么打当前会话的属性


技术分享


看一下编码方式是否为UTF-8


三、SSH连不上的各种联想过程


之前在公司工作的时候,遇到这样一种情况:

由于错误操作,之前的虚拟机以及其中的系统都一去不返了

后来重新安装 ,进行ssh连接,发现远程连接竟然无法连接,提示22端口连接失败,但是可以ping通


解决这个问题花了我不少时间去查资料,网上写的解决方法也是五花八门

经过各种尝试和联想的过程,最终总算解决了,现在想分享出来和大家一起学习


猜测原因大概有以下几种情况:

IP配置错误,或者配置完成没有重启网络连接,但是既然可以ping通应该不是这个问题

但是为了保险起见,还是重启了一下,不过重启之后依旧不奏效


关闭防火墙和selinux


[root@test1 ~]# setenforce 0

[root@test1 ~]# service iptables stop      


通过命令查看redhat防火墙:

[root@test1 ~]# service  iptables status

iptables: Firewall is not running.


重启SSH服务


以root用户登录Linux,打开终端,运行: 

[root@test1 ~]# service sshd start

[root@test1 ~]# service sshd restart

Stopping sshd:                                             [  OK  ]

Starting sshd:                                               [  OK  ]


检查是否安装了ssh-server服务


安装的redhat最小化安装字符界面, 默认是没有安装ssh-server服务的

[root@test1 ~]# yum  install openssh-server* -y                                        #进行安装ssh-server 服务

[root@test1 ~]# netstat  -tclnp        | grep  sshd                                         #查看sshd端口是否处于监听状态


发现sshd   22端口已是监听状态,再次使用xshell或者xftp连接发现成功连接


检查SSH服务配置文件


补充一下,Linux的某些版本,是不允许root用户远程登陆的,需要修改设置

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

PermitRootLogin no 


这就不允许root用户远程登录,要修改成PermitRootLogin yes 并重启sshd服务才行

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

PermitRootLogin yes

[root@test1 ~]# service sshd restart

  

设置网络连接方式


如果还ping不同,需要在虚拟机设置中,将 NetworkAdapter设置成"Bridged"(桥接), 因为默认是“NAT”

技术分享


查看虚拟网络编辑器配置


技术分享


在VMware虚拟机虚拟网络编辑器设置好了网关、子网IP、DNS之后

正常情况下,打开VMnet8就可以看到IPv4地址和上面配置的子网IP相同

我这里发现VMnet8的IP已经不见了,所以去虚拟机网络编辑器重新设置就好了


技术分享


总结:

发现问题后,正常思路应该先看根源,这次问题发现就有点走冤枉路了

首先不看是否已经存在这个东西便去看是否正确设置,耽误时间,希望大家以后都注意一下


Linux SSH 连接不上的各种联想