1. 程式人生 > >ssh免密登錄linux服務器

ssh免密登錄linux服務器

普通 all ora pan random update under size src

Ssh免密登錄

sshd服務

sshd簡介:

SSH 密鑰為登錄 Linux 服務器提供了更好且安全的機制。運行 ssh-keygen 後,將會生成公私密鑰對。你可以將公鑰放置到任意服務器,從持有私鑰的客戶端連接到服務器的時,會用它來解鎖。兩者匹配時,系統無需密碼就能解除鎖定。

官方維護文檔:https://www.ssh.com/ssh/

參考文檔:https://www.cnblogs.com/ioveNature/p/7919115.html

https://www.cnblogs.com/panblack/p/Secure_ssh_trust_connection.html


一、服務器上創建用戶:

在服務器上創建普通用戶,為每個人都分配一個自己的用戶。

# groupadd dd

# useradd -g dd dd1

[root@localhost ~]# passwd dd1

Changing password for user dd1.

New password:

BAD PASSWORD: The password is shorter than 7 characters

Retype new password:

passwd: all authentication tokens updated successfully.

# 這個密碼管理員管理好,不用給其他人。稍後,用戶是通過他們的公鑰

+口令登錄的。不需要知道服務器用戶的密碼。

二、windows上生成密鑰免密連接服務器:


Xshell配置免密登錄:

參考:

https://www.cnblogs.com/ioveNature/p/7919115.html

秘鑰生成

生成公鑰

工具 -> 新建用戶秘鑰生成向導 ->

技術分享圖片


下一步 ->

技術分享圖片


點擊下一步,輸入密碼:

技術分享圖片


點擊下一步

技術分享圖片


點擊保存為文件,完成。

生成私鑰

工具 -> 用戶秘鑰管理者

技術分享圖片


選中秘鑰類型 -> 導出

技術分享圖片


保存,輸入之前設置的秘鑰保護密碼,生成私鑰

技術分享圖片


至此,生成了一對 公鑰-私鑰 對。

技術分享圖片


在服務器上添加公鑰權限

  • 上傳公鑰到服務器的
    /root/.ssh目錄下

技術分享圖片


  • 執行命令cat id_rsa_2048.pub >> authorized_keys chmod 600 authorized_keys
  • 然後執行 cat authorized_keys即可看到公鑰內容已經添加到文件中去了。

XShell中登錄

  • 文件-> 新建

技術分享圖片


名稱沒有太大限制。隨意填寫,這裏填寫的是rsa-test
接著填寫主機的IP地址,也就是所要連接的服務器的IP地址。

  • 填寫 用戶身份驗證 信息

技術分享圖片


這裏的密碼為前面所設置的秘鑰的保密碼,用戶名為服務器的賬號用戶名。

在多終端的XShell上進行登錄

如果在另外一臺電腦上連接這個服務器賬號,則除了前面一步的配置之外,還需要手動添加私鑰。具體方法為:

工具-> 用戶秘鑰管理者

技術分享圖片


選擇 導入,然後選擇私鑰之後選擇打開即可正常連接。

技術分享圖片


備註

如果是服務器管理員,上面有多個用戶賬號,則需要為每一個用戶進行添加權限,這時候除了前面的公鑰信息之外,還要綁定用戶名。

參考

  • Xshell配置ssh免密碼登錄-密鑰公鑰(Public key)與私鑰(Private Key)登錄


Securecry上配置免密登錄:


參考:https://blog.csdn.net/wangquannetwork/article/details/46062675

三、linux上生成密鑰對免密連接服務器:

1、切換成對應的用戶

# su dd

2、使用ssh-keygen生成key,註釋可以加郵件,

[dd@localhost ~]$ ssh-keygen -t rsa -C "php key"

Generating public/private rsa key pair.

Enter file in which to save the key (/home/dd/.ssh/id_rsa):  # 要求輸入密鑰保存位置

Enter passphrase (empty for no passphrase):  # 輸入密鑰口令

Enter same passphrase again:  # 確認密鑰口令

Your identification has been saved in /home/dd/.ssh/id_rsa.

Your public key has been saved in /home/dd/.ssh/id_rsa.pub.

The key fingerprint is:

cc:67:bb:e7:44:e4:f0:f9:d3:c3:20:98:bd:55:f1:35 php key

The key‘s randomart image is:

+--[ RSA 2048]----+

|               E.|

|                =|

|          . .  ..|

|       o  += ..  |

|        Sooo=o   |

|         o o+.o. |

|          ... oo.|

|           o.  ..|

|          .o.    |

+-----------------+

[dd@localhost ~]$ ls /home/dd/.ssh/ -a

.  ..  authorized_keys  id_rsa  id_rsa.pub

3、使用ssh-copy-id把本機的公鑰文件發送到目標服務器192.168.188.129上。


[dd@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa [email protected]

/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

[email protected]‘s password: #要求輸入對方主機dd1的密碼



Number of key(s) added: 1



Now try logging into the machine, with:   "ssh ‘[email protected]‘"

and check to make sure that only the key(s) you wanted were added.

註意:這裏會暴露192.168.188.129上用戶dd1的密碼。

避免暴露密碼方法:

a、使用rsync將公鑰文件傳輸過去

b、將id_rsa的內容復制出來,然後追加到192.168.188.129裏的authorized_keys裏。

4、設置.ssh/權限

linux操作主機上設置:

# [dd@localhost ~]$ chmod 700 ~/.ssh/

# [dd@localhost ~]$ chmod 600 ~/.ssh/*

# [dd@localhost .ssh]$ ll

total 16

-rw------- 1 dd dd  381 Aug 30 16:04 authorized_keys

-rw------- 1 dd dd 1766 Aug 30 17:29 id_rsa

-rw------- 1 dd dd  389 Aug 30 17:29 id_rsa.pub

-rw------- 1 dd dd  354 Aug 30 18:24 known_hosts


linux服務器上設置:

# [root@localhost ~]$ chmod 700 /home/dd1/.ssh/

# [root@localhost ~]$ chmod 600 /home/dd1/.ssh/*

# [root@localhost ~]# ll /home/dd1/.ssh/

total 8

-rw-------. 1 dd1 dd 389 Aug 30 20:52 authorized_keys

-rw-------. 1 dd1 dd 354 Aug 31 09:57 known_hosts


5、這時候連接,就能夠正常了。

[dd@localhost .ssh]$ ssh [email protected]

Enter passphrase for key ‘/home/dd/.ssh/id_rsa‘:  # 需要輸入密鑰口令

Last login: Thu Aug 30 20:11:42 2018

[dd1@localhost ~]$

# 如果在ssh-keygen生成密鑰時,沒有輸入密鑰口令,而是一路回車,那麽這裏用ssh連接的時候也不會要求輸入口令了。但是這樣很不安全,因為如果別人把你的私鑰文件拿去了,他也就不用密碼登錄了,服務器就是他的了。(如果沒有口令,想要增加,建議把之前的刪掉,重新開始弄。)

# 如果在ssh-keygen生成密鑰時,輸入了密鑰口令,那麽在這裏用ssh連接的時候,就需要輸入就需要輸入口令。(推薦)
參考:https://www.cnblogs.com/panblack/p/Secure_ssh_trust_connection.html

缺陷:

但是這樣很麻煩,雖然不用輸入服務器密碼了,但是需要輸入口令,很不利於以後的自動化運維,所以我們還需要配置一下ssh-agent

6ssh-agent代理。

啟動代理守護進程:

[dd@localhost .ssh]$ eval `ssh-agent`

Agent pid 26506

將私鑰添加到代理守護進程:

[dd@localhost .ssh]$ ssh-add

Enter passphrase for /home/dd/.ssh/id_rsa:

Identity added: /home/dd/.ssh/id_rsa (/home/dd/.ssh/id_rsa)

試試連接目標主機:

[dd@localhost .ssh]$ ssh [email protected]

Last login: Thu Aug 30 20:52:41 2018 from 192.168.188.128

[dd1@localhost ~]$

OK了!

這時候,我們在本機去連接服務器192.168.188.129就不在需要密碼和口令了。


四、在服務器上關閉密碼連接。

192.168.188.129服務器上設置:

[root@localhost .ssh]# vim /etc/ssh/sshd_config

RSAAuthentication yes

PubkeyAuthentication yes  # 公鑰認證默認也是yes的,但是註釋了,關閉要改為no

AuthorizedKeysFile %h/.ssh/authorized_keys



#為了安全性,可以修改SSH端口

Port 222



#禁用root賬戶登錄,非必要,但為了安全性,請配置

PermitRootLogin no



#有了證書登錄了,就禁用密碼登錄吧,密碼登錄改為no,安全要緊

PasswordAuthentication no

ssh免密登錄linux服務器