工作中遇到的問題
ssh_exchange_identification: Connection closed by remote host
原因是proxy設置的不對,應該用prc-proxy.intel.com:1080
注:也有可能是當時生成SSH key的時候使用了sudo權限,使得生成的SSH key文件權限比較大,這樣會導致普通用戶要用的時候因為權限問題訪問不到。此時需要刪掉原來的SSH key,用普通用戶生成新的。或者直接修改掉SSH key文件的權限。
什么是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個層次
- 命令行參數,如
-p 10086
,-i /path/to/identity_file
等選項來設置SSH的端口號或認證證書位置 - 針對某個用戶的配置文件,所在路徑為
~/.ssh/config
,默認是不存在的,需要手動創建 - 針對系統所有用戶的配置文件,,所在路徑為
/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
主要的規則如下:
- 每項配置都是
參數名 參數值
或參數值=參數名
的形式,其中參數名不區分大小寫,而參數值區分大小寫,如上面的參數名HostName
和Hostname
是同一個參數 - 不同主機的配置通過
Host
參數來區分,一個配置文件里面可以有針對多個Host的配置 - 以
#
開頭的是注釋,會被忽略 - 同一個Host的配置內部,
參數名 參數值
和參數值=參數名
的形式可以混用,如上例#2配置所示
下面詳細展開常見的參數類型。
常見參數類型
Host
類似昵稱,用於標識某個特定的配置,在ssh命令中使用,例如我們想要ssh連接到上例中的#1配置的主機,則在命令行執行如下命令即可:
ssh cluster
一個最有用的場景是使用scp在不同主機間傳數據。沒有配置之間,你得寫很長的參數,如
scp a.txt tom@192.168.11.11:~/
尤其是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配置文件
2、/etc/ssh/sshd_config配置文件
參考鏈接:
https://zhuanlan.zhihu.com/p/35922004
https://blog.51cto.com/3381847248/2066599
https://www.cnblogs.com/hangj/p/11506686.html