1. 程式人生 > 實用技巧 >Ubuntu SSH 配置學習筆記

Ubuntu SSH 配置學習筆記

工作中遇到的問題

ssh [email protected]時出現問題: FATAL :failed to begin relaying via SOCKS

ssh_exchange_identification: Connection closed by remote host

原因是proxy設定的不對,應該用prc-proxy.intel.com:1080

什麼是SSH配置?

SSH config是Linux系統下針對SSH客戶端的一個引數配置方案,可以將一些關於SSH命令的引數放到配置檔案中去,執行ssh命令的時候從檔案中讀取,簡化命令列的操作。

基本用法

(1)、使用某個使用者(例如user)登入遠端主機host

命令:ssh user@host

(2)、如果本地使用者名稱和遠端使用者名稱一致,則登入時可以省略使用者名稱

命令:ssh host

(3)、ssh的預設埠是22,也就是說,你的登入請求會送進遠端主機的22埠。使用-p引數,可以修改這個埠

命令:ssh –p 埠號 user@host

SSH 引數配置的3個層次

    1. 命令列引數,如-p 10086,-i /path/to/identity_file等選項來設定SSH的埠號或認證證書位置
    2. 針對某個使用者的配置檔案,所在路徑為~/.ssh/config,預設是不存在的,需要手動建立
    3. 針對系統所有使用者的配置檔案,,所在路徑為/etc/ssh/ssh_config
      引數重要性的順序也是1>2>3,即越近的配置重要性越高。這裡主要講述第2種情況下的配置方式,即針對~/.ssh/config
      檔案的寫法進行說明。

一個示例的檔案如下:

# configuration 1
Host cluster
    HostName 192.168.11.11
    User tom


# configuration 2
Host=aliyun
    Hostname=202.44.2.2
    User tom

主要的規則如下:

    1. 每項配置都是引數名 引數值引數值=引數名的形式,其中引數名不區分大小寫,而引數值區分大小寫,如上面的引數名HostNameHostname是同一個引數
    2. 不同主機的配置通過Host引數來區分,一個配置檔案裡面可以有針對多個Host的配置
    3. #開頭的是註釋,會被忽略
    4. 同一個Host的配置內部,引數名 引數值引數值=引數名的形式可以混用,如上例#2配置所示
      下面詳細展開常見的引數型別。

常見引數型別

Host

類似暱稱,用於標識某個特定的配置,在ssh命令中使用,例如我們想要ssh連線到上例中的#1配置的主機,則在命令列執行如下命令即可:

ssh cluster

一個最有用的場景是使用scp在不同主機間傳資料。沒有配置之間,你得寫很長的引數,如

scp a.txt [email protected]:~/
尤其是IP地址記憶起來好麻煩啊。配置過上例中的檔案後,這個任務可以簡化成這樣:
scp a.txt cluster:~/
省略了使用者名稱和IP地址,方便多了。

HostName

需要ssh連線過去的主機名,一般是IP地址,也可以用%h來替代命令列引數,這種情況由於我用的不多,所以沒有深入瞭解,具體情況可以參考參考連結。

User

登入主機的使用者名稱

IdentityFile

認證證書檔案,預設位置是~/.ssh/id_rsa,~/ssh/id_dsa等,如果採用預設的證書,可以不用設定此引數,除非你的證書放在某個自定義的目錄,那麼你就需要設定該引數來指向你的證書

Port

SSH訪問主機的埠號,預設是22埠,同上,只有在非預設情況下才需要設定該值

其他

貌似常用的引數就這些,別的引數可以在命令列通過man ssh_config來檢視,其實涉及的引數還是非常多的。

ssh配置檔案詳解

1、/etc/ssh/ssh_config配置檔案

選項引數                              說明
Host *                                      選項“Host”只對能夠匹配後面字串的計算機有效。“*”表示所有的計算機。
ForwardAgent no                              設定連線是否經過驗證代理(如果存在)轉發給遠端計算機。
ForwardX11 no                              設定X11連線是否被自動重定向到安全的通道和顯示集(DISPLAY set)
RhostsAuthentication no                      設定是否使用基於rhosts的安全驗證
RhostsRSAAuthentication no              設定是否使用用RSA演算法的基於rhosts的安全驗證
RSAAuthentication yes                      設定是否使用RSA演算法進行安全驗證
PasswordAuthentication yes              設定是否使用口令驗證
FallBackToRsh no                      設定如果用ssh連接出現錯誤是否自動使用rsh
UseRsh no                              設定是否在這臺計算機上使用“rlogin/rsh”
BatchMode no                              如果設為“yes”,passphrase/password(互動式輸入口令)的提示將被禁止。當不能互動式輸入口令的時候,這個選項對指令碼檔案和批處理任務十分有用
CheckHostIP yes                              設定ssh是否檢視連線到伺服器的主機的IP地址以防止DNS欺騙。建議設定為“yes”
StrictHostKeyChecking no              如果設定成“yes”,ssh就不會自動把計算機的密匙加入“$HOME/.ssh/known_hosts”檔案,並且一旦計算機的密匙發生了變化,就拒絕連線
IdentityFile ~/.ssh/identity              設定從哪個檔案讀取使用者的RSA安全驗證標識
Port 22                                      設定連線到遠端主機的埠
Cipher blowfish                              設定加密用的密碼
EscapeChar ~                              設定escape字元

2、/etc/ssh/sshd_config配置檔案

引數選項                                                        說明
Port 22                                                         SSH 預設使用 22 這個 port,您也可以使用多的 port !
Protocol 2,1                                                    選擇的 SSH 協議版本,可以是 1 也可以是 2 ,如果要同時支援兩者,就必須要使用 2,1 這個分隔了!
ListenAddress 0.0.0.0                                           監聽的主機適配卡!舉個例子來說,如果您有兩個 IP,分別是 192.168.0.100192.168.2.20 ,那麼只想要開放 192.168.0.100 時,就可以寫如同下面的樣式:
ListenAddress 192.168.0.100                                     只監聽來自 192.168.0.100 這個 IP 的SSH聯機。如果不使用設定的話,則預設所有介面均接受 SSH
PidFile /var/run/sshd.pid                                       可以放置 SSHD 這個 PID 的檔案!左列為預設值
LoginGraceTime 600                                              當使用者連上 SSH server 之後,會出現輸入密碼的畫面,在該畫面中,在多久時間內沒有成功連上 SSH server ,就斷線!時間為秒!
Compression yes                                                 是否可以使用壓縮指令?
HostKey /etc/ssh/ssh_host_key                                   SSH version 1 使用的私鑰
HostKey /etc/ssh/ssh_host_rsa_key                               SSH version 2 使用的 RSA 私鑰
HostKey /etc/ssh/ssh_host_dsa_key                               SSH version 2 使用的 DSA 私鑰
KeyRegenerationInterval 3600                                    由前面聯機的說明可以知道, version 1 會使用 server 的 Public Key ,每隔一段時間來重新建立一次!時間為秒!
ServerKeyBits 768                                               Server key 的長度!
SyslogFacility AUTH                                             當有人使用 SSH 登入系統的時候,SSH會記錄資訊
LogLevel INFO                                                   登入記錄的等級---》全部
PermitRootLogin no                                              是否允許 root 登入!預設是允許的,但是建議設定成 no!
UserLogin no                                                    在 SSH 底下本來就不接受 login 這個程式的登入!
StrictModes yes                                                 當使用者的 host key 改變之後,Server 就不接受聯機
RSAAuthentication yes                                           是否使用純的 RSA 認證!?僅針對 version 1 !
PubkeyAuthentication yes                                        是否允許 Public Key ?只有 version 2
AuthorizedKeysFile   .ssh/authorized_keys                       設定若要使用不需要密碼登入的賬號時,那麼那個賬號的存放檔案所在檔名!
RhostsAuthentication no                                         本機系統不使用 .rhosts , .rhosts 不安全!
IgnoreRhosts yes                                                是否取消使用 ~/.ssh/.rhosts 來做為認證!
RhostsRSAAuthentication no                                      針對 version 1 ,使用 rhosts 檔案在/etc/hosts.equiv配合 RSA 演算方式來進行認證!
HostbasedAuthentication no                                      這個專案與上面的專案類似,不過是給 version 2 使用的!
IgnoreUserKnownHosts no                                         是否忽略家目錄內的 ~/.ssh/known_hosts 這個檔案所記錄的主機內容
PasswordAuthentication yes                                      密碼驗證當然是需要的!
PermitEmptyPasswords no                                         上面那一項如果設定為 yes 的話,這一項就最好設定為 no ,這個專案在是否允許以空的密碼登入!
ChallengeResponseAuthentication yes                             挑戰任何的密碼認證!所以,任何 login.conf 規定的認證方式,均可適用!
PAMAuthenticationViaKbdInt yes                                  是否啟用其它的 PAM 模組!啟用這個模組將會導致 PasswordAuthentication 設定失效!

與Kerberos 有關的引數設定!底下不用設定
KerberosAuthentication no
KerberosOrLocalPasswd yes
KerberosTicketCleanup yes
KerberosTgtPassing no

有關在 X-Window 底下使用的相關設定
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

PrintMotd no                                                    登入後是否顯示出一些資訊呢?例如上次登入的時間、地點等,預設是 yes ,但是,如果為了安全,可以考慮改為 no !
PrintLastLog yes                                                顯示上次登入的資訊!預設也是 yes 
KeepAlive yes                                                   一般而言,如果設定這專案的話,那麼 SSH Server 會傳送KeepAlive 的訊息給 Client 端,以確保兩者的聯機正常!在這個情況下,任何一端死掉後, SSH 可以立刻知道!而不會有殭屍程式的發生!
UsePrivilegeSeparation yes                                      使用者的許可權設定專案!
MaxStartups 10                                                  同時允許幾個尚未登入的聯機畫面
DenyUsers *                                                     設定受抵擋的使用者名稱
AllowUsers *                                                    設定允許的使用者名稱


參考連結:

https://zhuanlan.zhihu.com/p/35922004

https://blog.51cto.com/3381847248/2066599

https://www.cnblogs.com/hangj/p/11506686.html