Linux下ssh的使用


 

 更多內容推薦微信公眾號,歡迎關注:

 

 

摘抄自:https://www.cnblogs.com/kevingrace/p/6110842.html

 

對於linux運維工作者而言,使用ssh遠程遠程服務器是再熟悉不過的了!對於ssh的一些嚴格設置也關系到服務器的安全維護,今天在此,就本人工作中使用ssh的經驗而言,做一些總結記錄來下。

-bash: ssh: command not found
解決辦法;
yum install -y openssh-server openssh-clinets

做法一:其實很簡單,這些信息是在目標機器的/etc/motd文件里自定義的
[root@monit-server ~]# cat /etc/motd
===================================
|||||||||||||||||||||||||||||||||||
===================================
HOSTNAME: monit-server
IPADDRES: 192.168.1.15
===================================
IDC監控機
===================================

/root/.ssh/id_rsa.pub  '-p 22222 root@192.168.18.18'

3)這樣,本機登錄到上面遠程機器(B機器)就不用輸入密碼
#ssh user@ip

(3)ssh登錄失敗,報錯:Pseudo-terminal will not be allocated because stdin
現象:
需要登錄線上的一台目標機器A,但是不能直接登錄(沒有登錄權限),需要先登錄B機器,然后從B機器跳轉到A機器。
腳本如下:
localhost:~ root# cat IDC-7.sh
#!/bin/bash
ssh root@101.201.114.106 "ssh -p25791 root@103.10.86.7"

但是在執行腳本的時候報錯如下:
Pseudo-terminal will not be allocated because stdin

原因:
偽終端將無法分配,因為標准輸入不是終端。
解決辦法:
需要增加-t -t參數來強制偽終端分配,即使標准輸入不是終端。
在腳本里添加-t -t參數即可,如下:
localhost:~ root# cat IDC-7.sh
#!/bin/bash
ssh root@101.201.114.106 "ssh -t -t -p25791 root@103.10.86.7"

或者
localhost:~ root# cat IDC-7.sh
#!/bin/bash
ssh -t root@101.201.114.106 "ssh -t -t -p25791 root@103.10.86.7"

(4)ssh遠程登陸緩慢問題
解決辦法:
編譯/etc/ssh/sshd_config配置文件:
UseDNS no
GSSAPIAuthentication no
然后重啟sshd服務即可!

(5)ssh登錄出現:permission denied(publickey.gssapi-with-mic)
解決方法:
修改/etc/ssh/sshd-config文件,將其中的:
PermitRootLogin no修改為yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys前面加上#屏蔽掉
PasswordAuthentication no修改為yes
最后重啟sshd服務即可!

(6)ssh連接錯誤問題
1)在使用ssh或scp或rsync遠程連接的時候,出現如下報錯:
Address **** maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
解決方法:
修改本機ssh_config文件
[root@kvmserver ~]# vim /etc/ssh/ssh_config
GSSAPIAuthentication no
[root@kvmserver ~]#/etc/init.d/sshd restart

問題迎刃而解~~

2)本機scp、rsync命令都已具備,但是在使用scp或rsync遠程同步的時候報錯:
bash: scp: command not found
bash: rsync: command not found
原因:是由於遠程機器上沒有安裝scp或rsync造成的!安裝這兩個命令即可~
yum install openssh-clients
yum install rsync

3)遠程ssh連接時錯誤“ The X11 forwarding request was rejected!”
解決方法:
將sshd_config中 設置 X11Forwarding yes
重啟sshd服務。

(7)ssh連接超時被踢出問題解決
當使用xshell,SecureCRT等客戶端訪問linux服務器,有時候會出現終端定期超時被踢出的情況。
下面介紹三種方法來防止超時被踢出的方法,后兩種情況的設置方法以及通過設置shell變量來達到此目的的方法:

1、 配置服務器
#vi /etc/ssh/sshd_config
1)找到 ClientAliveInterval參數,如果沒有就自己加一行
數值是秒,比如你設置為120 ,則是2分鍾
ClientAliveInterval 120
2)ClientAliveCountMax
指如果發現客戶端沒有響應,則判斷一次超時,這個參數設置允許超時的次數。如3 、5等自定義

修改兩項參數后如下:
----------------------------
ClientAliveInterval 120
ClientAliveCountMax 3                      //0 不允許超時次數
修改/etc/ssh/sshd_config文件,將 ClientAliveInterval 0和ClientAliveCountMax 3的注釋符號去掉,將ClientAliveInterval對應的0改成60,沒有就自己輸入。
ClientAliveInterval指定了服務器端向客戶端請求消息 的時間間隔, 默認是0, 不發送.而ClientAliveInterval 60表示每分鍾發送一次, 然后客戶端響應, 這樣就保持長連接了.ClientAliveCountMax, 使用默認值3即可.ClientAliveCountMax表示服務器發出請求后客戶端沒有響應的次數達到一定值, 就自動斷開. 正常情況下, 客戶端不會不響應.
重新加載sshd服務。退出客戶端,再次登陸即可驗證。
3)重啟sshd service
sudo /etc/init.d/ssh restart

2、 配置客戶端
#vim /etc/ssh/ssh_config
然后找到里面的
ServerAliveInterval
參數,如果沒有你同樣自己加一個就好了
參數意義相同,都是秒數,比如5分鍾等
ServerAliveInterval 300

3、echo export TMOUT=1000000 >> /root/.bash_profile; source .bash_profile
在Linux 終端的shell環境中通過設置環境變量TMOUT來阻止超時。如果顯示空白,表示沒有設置, 等於使用默認值0, 一般情況下應該是不超時. 如果大於0, 可以在如/etc/profile之類文件中設置它為0.

 //將下面密碼保存到文本進行復制、粘貼即可
lVj.jg&sKrf0cvtgmydqo7qPotxzxen9mefy?ej!kcaX2gQrcu2ndftkeamllznx>iHikTagiVz0$cMtqOcIypkpd,vvD*kJhs3q@sb:CiCqgtqdqvse5lssfmranbtx
參數說明:
-l 密碼長度
-d 多少個數字
-C 大寫字母個數
-s 特殊符號的個數

//默認監聽的是0.0.0.0

這樣,就只允許遠程機器通過ssh連接本機的192.168.1.15內網ip來進行登陸了。

8)禁止空密碼登錄
如果本機系統有些賬號沒有設置密碼,而ssh配置文件里又沒做限制,那么遠程通過這個空密碼賬號就可以登陸了,這是及其不安全的!
所以一定要禁止空密碼登陸。修改/etc/ssh/sshd_config,如下:
PermitEmptyPasswords no //這一項,默認就是禁用空密碼登陸

9) ssh_config和sshd_config
ssh_config和sshd_config都是ssh服務器的配置文件,二者區別在於,前者是針對客戶端的配置文件,后者則是針對服務端的配置文件。兩個配置文件都允許你通過設置不同的選項來改變客戶端程序的運行方式。sshd_config的配置一般都比較熟悉,下面單獨說下ssh_config針對客戶端的配置文件:

 

[root@dns01 dns_rsync]# cat /etc/ssh/ssh_config
# Site-wide defaults for various options
   Host *
        ForwardAgent no
        ForwardX11 no
        RhostsAuthentication no
        RhostsRSAAuthentication no
    ‍    RSAAuthentication yes
        PasswordAuthentication yes
        FallBackToRsh no
        UseRsh no
        BatchMode no
        CheckHostIP yes
        StrictHostKeyChecking no
        IdentityFile ~/.ssh/identity
        Port 22
        Cipher blowfish
        EscapeChar ~
 
下面對上述選項參數逐進行解釋:
# Site-wide defaults for various options
帶“#”表示該句為注釋不起作,該句不屬於配置文件原文,意在說明下面選項均為系統初始默認的選項。說明一下,實際配置文件中也有很多選項前面加有“#”注釋,雖然表示不起作用,其實是說明此為系統默認的初始化設置。
Host *
"Host"只對匹配后面字串的計算機有效,“*”表示所有的計算機。從該項格式前置一些可以看出,這是一個類似於全局的選項,表示下面縮進的選項都適用於該設置,可以指定某計算機替換*號使下面選項只針對該算機器生效。
ForwardAgent no
"ForwardAgent"設置連接是否經過驗證代理(如果存在)轉發給遠程計算機。
ForwardX11 no
"ForwardX11"設置X11連接是否被自動重定向到安全的通道和顯示集(DISPLAY set)。
RhostsAuthentication no
"RhostsAuthentication"設置是否使用基於rhosts的安全驗證。
RhostsRSAAuthentication no
"RhostsRSAAuthentication"設置是否使用用RSA算法的基於rhosts的安全驗證。
RSAAuthentication yes
"RSAAuthentication"設置是否使用RSA算法進行安全驗證。
PasswordAuthentication yes
"PasswordAuthentication"設置是否使用口令驗證。
FallBackToRsh no
"FallBackToRsh"設置如果用ssh連接出現錯誤是否自動使用rsh,由於rsh並不安全,所以此選項應當設置為"no"。
UseRsh no
"UseRsh"設置是否在這台計算機上使用"rlogin/rsh",原因同上,設為"no"。
BatchMode no
"BatchMode":批處理模式,一般設為"no";如果設為"yes",交互式輸入口令的提示將被禁止,這個選項對腳本文件和批處理任務十分有用。
CheckHostIP yes
"CheckHostIP"設置ssh是否查看連接到服務器的主機的IP地址以防止DNS欺騙。建議設置為"yes"。
StrictHostKeyChecking no
"StrictHostKeyChecking"如果設為"yes",ssh將不會自動把計算機的密匙加入"$HOME/.ssh/known_hosts"文件,且一旦計算機的密匙發生了變化,就拒絕連接。
IdentityFile ~/.ssh/identity
"IdentityFile"設置讀取用戶的RSA安全驗證標識。
Port 22
"Port"設置連接到遠程主機的端口,ssh默認端口為22。
Cipher blowfish
“Cipher”設置加密用的密鑰,blowfish可以自己隨意設置。
EscapeChar ~
“EscapeChar”設置escape字符。
======================================================
比如說,A機器的ssh端口是22,B機器的端口是22222,一般來說A機器ssh連接B機器的時候是使用-p22222指定端口。但是可以修改A機器的/etc/ssh/ssh_config文件中的
Port為22222,這樣A機器ssh連接的時候就默認使用22222端口了。

-------------------------------------------去掉SSH公鑰檢查的方法(交互式yes/no)------------------------------------------------

SSH公鑰檢查是一個重要的安全機制,可以防范中間人劫持等黑客攻擊。但是在特定情況下,嚴格的 SSH 公鑰檢查會破壞一些依賴SSH協議的自動化任務,就需要一種手段能夠繞過SSH的公鑰檢查。
SSH連接遠程主機時,會檢查主機的公鑰。如果是第一次連接該主機,會顯示該主機的公鑰摘要,彈出公鑰確認的提示,提示用戶是否信任該主機(Yes/no)。當選擇Yes接受,就會將該主機的公鑰追加到文件 ~/.ssh/known_hosts 中。當再次連接該主機時,就不會再提示該問題了。
SSH公鑰檢查有好處,但首次連接時會導致某些自動化任務中斷,或者由於 ~/.ssh/known_hosts 文件內容清空,導致自動化任務中斷。

去掉SSH公鑰檢查的方法:
1)SSH客戶端的StrictHostKeyChecking 配置指令,可以實現當第一次連接服務器時,自動接受新的公鑰。只需要修改 /etc/ssh/ssh_config 文件,包含下列語句:
StrictHostKeyChecking no

2)或者在ssh連接命令中使用-oStrictHostKeyChecking=no參數
[root@puppet ~]# ssh -p22222 172.168.1.33 -oStrictHostKeyChecking=no
或者
[root@puppet ~]# ssh -p22222 172.168.1.33 -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no

--------------------------------------------ansible中取消ssh交換式yes/no-----------------------------------------------
配置文件/etc/ansible/ansible.cfg的[defaults]中(打開注釋)
# uncomment this to disable SSH key host checking
host_key_checking = False


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM