1. 程式人生 > >Linux設置SSH密鑰以及別名無密碼登錄

Linux設置SSH密鑰以及別名無密碼登錄

private nss 補充 root 文件中 hostname sha256 兩個 啟用

Linux設置SSH密鑰以及別名無密碼登錄

    本文基於S:Lentos release 7.2&C:MacOS 進行的學習記錄,初衷是解決多個服務器總要找IP地址和不同服務器有多個不同密碼的問題,沒想到這麽一個簡單的問題卻弄了小半天。

首先生成使用密鑰對

使用ssh-keygen生成密鑰對

生成的文件默認保存在~/.ssh/目錄下,一般會用到下面三個命令:

  • -t 指定密鑰類型,支持“dsa”,”ecdsa”,”ed25519”,”rsa”,默認類型為“rsa”
  • -f filename 指定生成密鑰文件的名字 ,公鑰filename.pub ,私鑰filename
  • -C 對密鑰進行補充說明 ,在filename.pub內容末尾處
    執行一下命令後,會提示是否對密鑰使用密碼,如果為了方便可以直接回車,自己的電腦為共享環境建議使用密碼
user@client:.ssh  ssh-keygen -f test -C 這是一個測試密鑰
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in test.
Your public key has been saved in test.pub.
The key fingerprint is:
SHA256:V4oFwHjA96nOPz9YKWxB4IMuJALPyxZLadZUpDy5Ykg 這是一個測試密鑰
The key‘s randomart image is:
+---[RSA 2048]----+
|.  .o*=o.        |
|.o =o=+ ..       |
|oEX Booo .. .    |
|oO = o .+o o     |
|. O o  oS.o.     |
| o o  . +.o      |
|     o . +       |
|      o o .      |
|       ..o..     |
+----[SHA256]-----+

執行完成後生成兩個文件tes和test.pub

user@client:.ssh  cat test test.pub
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
***************************************
qtufyLXIB2Ej6Nu05QAAABjov5nmmK/kuIDkuKrmtYvor5Xlr4bpkqUB
-----END OPENSSH PRIVATE KEY-----    ??以上是test內容
ssh-rsa AAAAB3NzaC1yc2EAAAADAQAB******B9pxGFIXoZFWJmGPNmYT/rlXV 這是一個測試密鑰         --------這裏是公鑰內容

使用ssh-copy-id將本地的公鑰復制到遠程主機上的authorized_keys的文件上,並對remote 主機的用戶的~/.ssh和~/.ssh/authorized_keys文件設置合適的權限

語法:ssh-copy-id [-i [identity_file]] [user@]machine
-i:指定公鑰文件
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

然後就可以使用ssh調用私鑰進行登錄Server端

    user@server:ssh -i ~/.ssh/test user@server

如果仍需要密碼來進行登錄,首先確定權限的問題

  • 打開sshd_config文件
    sudo vi /etc/ssh/sshd_config
  • 修改以下參數配置
#是否啟用root用戶登錄
PermitRootLogin yes

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

# 是否允許密碼授權登錄
PasswordAuthentication no
  • 重啟sshd服務
systemctl restart  sshd.service
或者
service sshd restart

到這裏基本就可以實現使用密鑰進行無密碼登錄了,但是使用別名登錄的過程中碰到了權限沒問題的情況下一直提示讓輸入密碼的問題。找到了兩個解決辦法,首先說一下設置ssh別名使用的問題,並且在/etc/log/secure 裏一直得到 Connection closed by xxx [preauth]的提示

  • 首先設置一下別名
1.Host server
2.    HostName 127.0.0.1                    ##登錄主機名或者IP地址
3.    Port 22                               ##指定端口號
4.    User root                             ##登錄用戶名
5.    IdentityFile  ~/.ssh/test.pub         ##登錄公鑰
6.    IdentitiesOnly yes                    ##只接受key登錄

Host server2
    HostName 192.168.1.2
    User User

這樣之後就可以用 ssh server 這樣的命令進行登錄了,但是我在設置完成之後(我的config中沒有寫4&5),而且我配置的是兩臺服務器,在server可以使用別名無密碼登錄的情況下,server2卻一直提示讓輸入密碼。網上找半天也沒找到原因,後來在不斷嘗試下找到兩個解決辦法

  1. 在config文件中指定IdentityFile
  2. 用ssh-add添加密鑰到ssh-agent中
    ssh-add ~/.ssh/私鑰
    不明所以,但是以上兩個方法解決了我的使用問題。

我的無用域名

Linux設置SSH密鑰以及別名無密碼登錄