一、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
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 [email protected]
然後确認一下公鑰與密鑰的建立,以及對應于用戶端的一些處理
[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用戶端軟體同時具備了終端仿真器和檔案傳輸功能
<a href="https://s1.51cto.com/wyfs02/M02/95/6E/wKioL1kVLFvi9MHeAAHLOJOPsys925.png-wh_500x0-wm_3-wmp_4-s_2942625705.png" target="_blank"></a>
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 是一款 Windows 平台的免費開源 FTP 用戶端。WinSCP 不提供 ftp server 版本
支援的傳輸協定有 FTP、SFTP 和 SSH,同時也支援 SCP(安全拷貝協定)
WinSCP 的圖形化使用者界面為終端使用者提供了直覺化的界面,因而更易于使用
同時 WinSCP 也為習慣了終端操作的使用者提供了強大的指令行界面
WinSCP 的腳本和自動化特性使得任務自動化成為可能
同時也支援拖拽檔案進行傳輸,還有其他的 Windows 內建特性
例如桌面、快捷啟動圖示,檔案浏覽器的“發送到”菜單等等
WinSCP 在其它作業系統上沒有提供類似的功能
XShell
首先解釋一下XShell這款工具,它可以用來遠端操控Linux系統
是以我們可以在Windows系統中,安裝這個軟體用來打開Linux終端
下面來介紹一下XShell的安裝和配置過程:
1.建立一個會話
<a href="http://img.it610.com/image/info5/a47d7b29d8f0437fb96f24fb243cd065.jpg" target="_blank"></a>
2.在連接配接這裡填上使用者名和主機,協定為SSH,其餘預設
<a href="http://img.it610.com/image/info5/4803a6e1f36f4c0095bcaeef64b69f8b.png" target="_blank"></a>
這裡解釋一下主機IP,它是虛拟機中Linux的IP位址
是以我們可以通過如下方法擷取:在CentOS的終端中輸入ifconfig指令,可以查出IP位址如下圖所示
<a href="http://img.it610.com/image/info5/e9234906c6e94b96bcba7f05c4f987d3.png" target="_blank"></a>
3.在使用者身份認證這裡輸入使用者名就行,其他預設
4.點選确定按鈕之後,出現下圖的對話框,點選連接配接
<a href="http://img.it610.com/image/info5/472c0fdcbb7b4c1b81058180571961b1.png" target="_blank"></a>
5.這裡會彈出一個對話框,點選接受并儲存
<a href="http://img.it610.com/image/info5/b449f0e048f14158a5a74d916856b2e7.png" target="_blank"></a>
那麼這個會話就建立好了
我們可輸入指令df來檢視Linux的分區狀态
确定一下我們連接配接的是不是我們期望的Linux系統
<a href="http://img.it610.com/image/info5/546be878812d4be187ecb0af313224ed.jpg" target="_blank"></a>
注意:如果建立出來的會話出現亂碼狀态,那麼打目前會話的屬性
<a href="http://img.it610.com/image/info5/0471ced8afe8460d8b5475ccfc5fbdeb.png" target="_blank"></a>
看一下編碼方式是否為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,打開終端,運作:
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服務才行
PermitRootLogin yes
設定網絡連接配接方式
如果還ping不同,需要在虛拟機設定中,将 NetworkAdapter設定成"Bridged"(橋接), 因為預設是“NAT”
<a href="https://s5.51cto.com/wyfs02/M02/95/71/wKiom1kVRmnj3kbTAABRDoJfhdk198.png-wh_500x0-wm_3-wmp_4-s_241110648.png" target="_blank"></a>
檢視虛拟網絡編輯器配置
<a href="https://s3.51cto.com/wyfs02/M01/95/71/wKiom1kVQ_-zHWiHAAB5T0VwTcA169.png-wh_500x0-wm_3-wmp_4-s_1475595986.png" target="_blank"></a>
在VMware虛拟機虛拟網絡編輯器設定好了網關、子網IP、DNS之後
正常情況下,打開VMnet8就可以看到IPv4位址和上面配置的子網IP相同
我這裡發現VMnet8的IP已經不見了,是以去虛拟機網絡編輯器重新設定就好了
<a href="https://s3.51cto.com/wyfs02/M00/95/71/wKiom1kVRJvh_iUhAACEYfHL9A0470.png-wh_500x0-wm_3-wmp_4-s_3779457702.png" target="_blank"></a>
總結:
發現問題後,正常思路應該先看根源,這次問題發現就有點走冤枉路了
首先不看是否已經存在這個東西便去看是否正确設定,耽誤時間,希望大家以後都注意一下
本文轉自 2012hjtwyf 51CTO部落格,原文連結:http://blog.51cto.com/hujiangtao/1924969,如需轉載請自行聯系原作者