Linux系統下如何作到SSH免密碼登陸

A爲本地主機(即用於控制其餘主機的機器) ;linux

B爲遠程主機(即被控制的機器Server), 假如ip爲172.24.253.2 ;shell

A和B的系統都是Linux安全

 

在A上的命令:服務器

# ssh-keygen -t rsa (連續三次回車,即在本地生成了公鑰和私鑰,不設置密碼)ssh

# ssh root@172.24.253.2 "mkdir .ssh;chmod 0700 .ssh" (須要輸入密碼, 注:必須將.ssh的權限設爲700)server

# scp ~/.ssh/id_rsa.pub root@172.24.253.2:.ssh/id_rsa.pub (須要輸入密碼)ip

 

在B上的命令:rem

# touch /root/.ssh/authorized_keys (若是已經存在這個文件, 跳過這條)get

# chmod 600 ~/.ssh/authorized_keys  (# 注意: 必須將~/.ssh/authorized_keys的權限改成600, 該文件用於保存ssh客戶端生成的公鑰,能夠修改服務器的ssh服務端配置文件/etc/ssh/sshd_config來指定其餘文件名)it

# cat /root/.ssh/id_rsa.pub  >> /root/.ssh/authorized_keys (將id_rsa.pub的內容追加到 authorized_keys 中, 注意不要用 > ,不然會清空原有的內容,使其餘人沒法使用原有的密鑰登陸)

 

回到A機器:

# ssh root@172.24.253.2 (不須要密碼, 登陸成功)

 

假如在生成密鑰對的時候指定了其餘文件名(或者須要控制N臺機器,此時你會生成多對密鑰),則須要使用參數-i指定私鑰文件

# ssh root@172.24.253.2 -i /path/to/your_id_rsa

   www.2cto.com  

scp也是同樣,如:

scp -i /root/.ssh/id_rsa  ./xxx 192.168.102.158:/home/wwy/bak

 

由於默認狀況下ssh命令會使用~/.ssh/id_rsa做爲私鑰文件進行登陸,若是須要鏈接多臺服務器而又不但願每次使用ssh命令時指定私鑰文件,能夠在ssh的客戶端全局配置文件/etc/ssh/ssh_config(或本地配置文件~/.ssh/config, 若是該文件不存在則創建一份)中增長以下配置

IdentityFile /path/to/your_id_rsa. 

 

也能夠爲每一個服務器指定一個Host配置:  

 

Host 172.24.253.2

        IdentityFile /path/to/your_id_rsa

  

若是鏈接時出現以下的錯誤:

  Agent admitted failure to sign using the key

則使用 ssh-add 指令將私鑰 加進來 (根據我的的密匙命名不一樣更改 id_rsa)

 

1

ssh-add   ~/.ssh/id_rsa

 

若是能保護好本身的私鑰, 這種方法相對在shell上輸入密碼, 要安全一些

   www.2cto.com  

#########################################################################

 

深刻一點點:

 

從表面上簡單的理解一下登陸的過程,

首先 ssh-keygen -t rsa 命令生成了一個密鑰和一個公鑰, 並且密鑰能夠設置本身的密碼

能夠把密鑰理解成一把鑰匙, 公鑰理解成這把鑰匙對應的鎖頭,

把鎖頭(公鑰)放到想要控制的server上, 鎖住server, 只有擁有鑰匙(密鑰)的人, 才能打開鎖頭, 進入server並控制

而對於擁有這把鑰匙的人, 必需得知道鑰匙自己的密碼,才能使用這把鑰匙 (除非這把鑰匙沒設置密碼), 這樣就能夠防止鑰匙被了配了(私鑰被人複製)

 

固然, 這種例子只是方便理解罷了,

擁有root密碼的人固然是不會被鎖住的, 並且不必定只有一把鎖(公鑰), 但若是任何一把鎖, 被人用其對應的鑰匙(私鑰)打開了, server就能夠被那我的控制了

因此說, 只要你曾經知道server的root密碼, 並將有root身份的公鑰放到上面, 就能夠用這個公鑰對應的私鑰"打開" server, 再以root的身分登陸, 即便如今root密碼已經更改!

 

---------------------------------------------------------------------------------------

方法2、安裝sshpass

# sudo apt-get install sshpass

安裝完成後使用sshpass容許你用 -p 參數指定明文密碼,而後直接登陸遠程服務器。例如:

 

# sshpass -p '你的密碼' ssh 用戶名@服務器ip地址

   www.2cto.com  

用 '-p' 指定了密碼後,還須要在後面跟上標準的 ssh 鏈接命令。

 

Sshd的配置文件/etc/ssh/ssd_config

 

-------------------------------

ssh無密碼驗證的狀況下向遠程主機發送命令

 

發送一條:

ssh username@remote_server_ip your_command

 

ssh username@remote_server_ip 「your_command1; your_command2; your_command3」

相關文章
相關標籤/搜索