1. 程式人生 > >Linux SSH 連接不上的各種聯想

Linux SSH 連接不上的各種聯想

network 配置文件 網絡服務 服務器 聯想


一、CentOS之SSH的安裝與配置


SSH 為 Secure Shell 的縮寫,由 IETF 的網絡工作小組

(Network Working Group)所制定SSH 為建立在應用層和傳輸層基礎上的安全協議


傳統的網絡服務程序,如FTP、POP和Telnet其本質上都是不安全的

因為它們在網絡上用明文傳送數據、用戶帳號和用戶口令,很容易受到中間人(man-in-the-middle)攻擊方式的攻擊

存在另一個人或者一臺機器冒充真正的服務器接收用戶傳給服務器的數據,然後再冒充用戶把數據傳給真正的服務器


而 SSH 是目前較可靠,專為遠程登錄會話和其他網絡服務提供安全性的協議。利用 SSH 協議可以有效防止

遠程管理過程中的信息泄露問題。透過 SSH 可以對所有傳輸的數據進行加密,也能夠防止 DNS 欺騙和 IP 欺騙


安裝SSH

[[email protected] ~]# yum install ssh

啟動SSH

[[email protected] ~]# service sshd start

設置開機運行

[[email protected] ~]# chkconfig sshd on


SSH相關配置文件的修改


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


[[email protected] ~]# 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登錄到服務器,以最大限度減少不安全因素


修改屏蔽規則,在文尾添加相應行,設置方法如下:


[[email protected] ~]# 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服務才能使新的設置生效

[[email protected] ~]# service sshd restart

Stopping sshd: [ OK ]

Starting sshd: [ OK ]


這時,在遠程終端(自用PC等)上,用SSH客戶端軟件以正常的密碼的方式是無法登錄服務器的

為了在客戶能夠登錄到服務器,我們接下來建立SSH用的公鑰與私鑰,以用於客戶端以“鑰匙”的方式登錄SSH服務器


SSH2的公鑰與私鑰的建立:


登錄為一個一般用戶,基於這個用戶建立公鑰與私鑰

[[email protected] ~]# 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 [email protected]


然後確認一下公鑰與密鑰的建立,以及對應於客戶端的一些處理


[[email protected] ~]$ cd ~/.ssh  ← 進入用戶SSH配置文件的目錄

[[email protected] ~]$ 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  ← 確認公鑰已被建立

[[email protected] .ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  ← 公鑰內容輸出到相應文件中

[[email protected] .ssh]$ rm -f ~/.ssh/id_rsa.pub  ← 刪除原來的公鑰文件

[[email protected] .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


[[email protected] ~]# setenforce 0

[[email protected] ~]# service iptables stop


通過命令查看redhat防火墻:

[[email protected] ~]# service iptables status

iptables: Firewall is not running.


重啟SSH服務


以root用戶登錄Linux,打開終端,運行:

[[email protected] ~]# service sshd start

[[email protected] ~]# service sshd restart

Stopping sshd: [ OK ]

Starting sshd: [ OK ]


檢查是否安裝了ssh-server服務


安裝的redhat最小化安裝字符界面, 默認是沒有安裝ssh-server服務的

[[email protected] ~]# yum install openssh-server* -y #進行安裝ssh-server 服務

[[email protected] ~]# netstat -tclnp | grep sshd #查看sshd端口是否處於監聽狀態


發現sshd 22端口已是監聽狀態,再次使用xshell或者xftp連接發現成功連接


檢查SSH服務配置文件


補充一下,Linux的某些版本,是不允許root用戶遠程登陸的,需要修改設置

[[email protected] ~]# vim /etc/ssh/sshd_config

PermitRootLogin no


這就不允許root用戶遠程登錄,要修改成PermitRootLogin yes 並重啟sshd服務才行

[[email protected] ~]# vim /etc/ssh/sshd_config

PermitRootLogin yes

[[email protected] ~]# service sshd restart


設置網絡連接方式


如果還ping不同,需要在虛擬機設置中,將 NetworkAdapter設置成"Bridged"(橋接), 因為默認是“NAT”

技術分享


查看虛擬網絡編輯器配置


技術分享


在VMware虛擬機虛擬網絡編輯器設置好了網關、子網IP、DNS之後

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

我這裏發現VMnet8的IP已經不見了,所以去虛擬機網絡編輯器重新設置就好了


技術分享


總結:

發現問題後,正常思路應該先看根源,這次問題發現就有點走冤枉路了

首先不看是否已經存在這個東西便去看是否正確設置,耽誤時間,希望大家以後都註意一下


Linux SSH 連接不上的各種聯想