公網(wǎng)機(jī)器存在被攻擊的風(fēng)險(xiǎn),經(jīng)常會(huì)出現(xiàn)ssh登錄的時(shí)候,由于密碼輸錯(cuò)次數(shù)過多而被鎖住無法登錄的情況。原因是公網(wǎng)IP被攻擊,不斷嘗試ssh登錄,導(dǎo)致密碼輸錯(cuò)次數(shù)過多。
規(guī)避方法有1. 修改默認(rèn)端口號(hào)為非22端口, 2. 關(guān)閉密碼登錄功能,3. 配置防火墻,只允許指定IP的機(jī)器訪問。此處介紹關(guān)閉密碼登錄,使用密鑰登錄方法。
基礎(chǔ)操作
- 在客戶端生成密鑰對(duì)
ssh-keygen
,之后一直按回車即可。 - 將本地密鑰對(duì)的公鑰上傳到服務(wù)器。
-
ssh-copy-id -i ~/.ssh/id_rsd.pub root@IP
。需要輸入服務(wù)器的密碼。如果ssh默認(rèn)端口不是22,需要加-p 端口號(hào)
指定端口。 - 或者手動(dòng)復(fù)制
~/.ssh/id_rsd.pub
中的內(nèi)容到服務(wù)器的~/.ssh/authorized_keys
文件中。
- 直接免密登錄。
ssh root@IP
。可以用-p 端口號(hào)
、-i key_file
分別指定端口號(hào)和密鑰文件。 - 關(guān)閉密碼登錄。修改
/etc/ssh/sshd_config
文件,將PasswordAuthentication yes
改為no
,PubkeyAuthentication yes
改為yes
(如果為no的話),然后重啟sshd服務(wù)systemctl restart sshd
即可。
注意:私鑰文件的權(quán)限必須是600。
多環(huán)境配置
如果我們的服務(wù)器數(shù)量較多,每次要登錄不同環(huán)境,且每個(gè)環(huán)境使用的密鑰對(duì)不一致,則,可以通過~/.ssh/config
文件來對(duì)環(huán)境進(jìn)行區(qū)分。
Host alias # 別名,之后可以通過ssh alias來直接登錄
User user # 用戶名
HostName IP # 服務(wù)端IP
Port port # 端口號(hào),可省略,默認(rèn)22
IdentityFile /xxx/your_key # 密鑰文件,可省略,默認(rèn)~/.ssh/id_rsd
ServerAliveInterval 360 # 會(huì)話保持時(shí)間,單位秒,可省略
跳板機(jī)
有時(shí)候,我們的目標(biāo)機(jī)器不能直接連接,需要先登錄跳板機(jī)然后在跳板機(jī)中登錄目標(biāo)機(jī)器。可以通過如下配置,然后ssh mubiaoji
直接連接目標(biāo)機(jī)器。
Host tiaoban
Hostname 跳板機(jī)的ip
Port 跳板機(jī)的端口(如果是非22的需要填寫)
User root(如果非root,換成跳板機(jī)的用戶)
Host mubiaoji
Hostname 目標(biāo)機(jī)的IP
Port 目標(biāo)機(jī)的端口(如果是非22的需要填寫)
User root(如果非root,換成目標(biāo)機(jī)的用戶)
ProxyCommand ssh -q -x -W %h:%p tiaoban
ProxyCommand用來指定連接到服務(wù)器的命令. 其可以是任何的命令,只要能從其標(biāo)準(zhǔn)輸入讀入數(shù)據(jù),然后寫出到標(biāo)準(zhǔn)輸出即可。這條命令需要連接到sshd服務(wù)器上。
在不使用ProxyCommand的情況下,ssh會(huì)自己建立到目標(biāo)機(jī)器22端口的連接.使用了ProxyCommand,那么使用指定命令來建立到目標(biāo)機(jī)的連接,ssh直接使用已經(jīng)建立的連接。
-W host:port 將client過來的標(biāo)準(zhǔn)輸入和輸出forward到host和port指定的地方.
這兒的%h表示要連接的目標(biāo)機(jī),也就是Hostname指定的ip或者主機(jī)名,%p表示要連接到目標(biāo)機(jī)的端口.這兒可以直接寫死固定值,但是使用%h和%p可以保證在Hostname和Port變化的情況下ProxyCommand這行不用跟著變化.
新版本的ssh可以通過ProxyJump來配置跳板機(jī)。
Host proxy
Hostname 跳板機(jī)的ip
Port 跳板機(jī)的端口(如果是非22的需要填寫)
User root(如果非root,換成跳板機(jī)的用戶)
Host mubiaoji
Hostname 目標(biāo)機(jī)的IP
Port 目標(biāo)機(jī)的端口(如果是非22的需要填寫)
User root(如果非root,換成目標(biāo)機(jī)的用戶)
ProxyJump proxy
其他
- 有些機(jī)器設(shè)置了禁止root用戶登錄功能,開啟方式為修改
/etc/ssh/sshd_config
文件中的PermitRootLogin no
為yes
。 - scp命令,可以通過
scp -i you_key_file xxx root@IP:/xxxx
來拷貝。 - 配置了免密登陸后,存在問題需要用密碼登錄,可以用下面的命令
ssh -o PreferredAuthentications=password xxx@xxx.xxx.xxx.xxx
,當(dāng)然如果你服務(wù)端關(guān)閉了密碼登錄這條無效。