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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章