Linux : 如何在沒有密碼的情況下從 SSH2 到 OpenSSH 執行 SSH 和 SCP
在我們之前的文章中,我們討論了如何在以下三種情況下設置基于 ssh 密鑰的身份驗證以執行 ssh 和 scp 無需密碼:
OpenSSH 到 OpenSSH
OpenSSH 到 SSH2
SSH2 到 SSH2
在本文中,我將解釋如何在沒有密碼的情況下從 SSH2(本地主機)到 OpenSSH(遠程主機)執行 ssh 和 scp。
1. 識別本地主機和遠程主機的 SSH 版本
在此示例中,local-host 運行 SSH2,而 remote-host 運行 OpenSSH。
[local-host]$ ssh -V ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu [remote-host]$ ssh -V OpenSSH_4.3p2, OpenSSL 0.9.8b 04 May 2019
2.在本地主機上使用ssh-keygen2生成SSH2認證密鑰對
在 SSH2 上,ssh-keygen 將是到 ssh-keygen2 的軟鏈接,如下所示。
[local-host]$ ls -l /usr/local/bin/ssh-keygen lrwxrwxrwx 1 root root 11 Jul 31 2006 /usr/local/bin/ssh-keygen -> ssh-keygen2 [local-host]$ ssh-keygen Generating 2048-bit dsa key pair 7 o.oOo..oOo.o Key generated. 2048-bit dsa, tiamo@local-host, Sun Oct 19 2020 14:49:42 -0700 Passphrase : [Enter the password here] Again : Private key saved to /home/tiamo/.ssh2/id_dsa_2048_a Public key saved to /home/tiamo/.ssh2/id_dsa_2048_a.pub
公鑰和私鑰存儲在您的主目錄下的 .ssh2 文件夾中。在此示例中,它位于 /home/tiamo/.ssh2 下。
您不應該與任何人共享私鑰。
默認情況下ssh-keygen2生成 DSA(數字簽名算法)密鑰對。您還可以生成 RSA 密鑰對,如下所示。
[local-host]$ ssh-keygen -t rsa
3. 將 SSH2 公鑰從本地主機復制到運行 OpenSSH 的遠程主機
將本地主機:/home/jsmith/.ssh2/id_dsa_2048_a.pub 文件復制到遠程主機:/home/jsmith/.ssh/id_dsa_1024_a.pub。在遠程主機上執行 vi /home/jsmith/.ssh/id_dsa_1024_b.pub 并從本地主機復制公鑰的內容。
[remote-host]$ vi /home/tiamo/.ssh/id_dsa_1024_a.pub ---- BEGIN SSH2 PUBLIC KEY ---- Subject: tiamo Comment: "2048-bit dsa, jsmith@local-host Sun Oct 19 2008 14:49:42 -070
[remote-host]$ vi /home/tiamo/.ssh/id_dsa_1024_a.pub ---- BEGIN SSH2 PUBLIC KEY ---- Subject: tiamo Comment: "2048-bit dsa, jsmith@local-host Sun Oct 19 2008 14:49:42 -070\0" 7ZTVd7H63VyVqBIqfmEBALVa6VKtALZkydlOiPasikEQfujH07tjW+OffaRufFDG0VQESj 5iGSvMtmBBj8wQxGlvJ/dayVqBvvHzMao8bwGC+HFUtH1un7uyIEwOqU1fNzEpghC97mIx tIxJA7ZTVd7H63VIqmzlLbp/ZCd6bcJLvZEepMz96nlNB4NJ5UYIfdgXNhf/TrJD8COWQs t6jsP6RG/WrpHi5iGSvMtmBBj8wQGHddexkRnf/o5YMFJZRo4Iwc7+bgYrIyywBZnfLL7T RTk9TBfWzgJHy/y1tTtCMvVooWvFZbG5AiV3de63MxBaD0o68SASyXZzVM+MabXhjcdXFY 2vjq2vJxOzunEAAAAVAOTeOzDCnj3K5iGSvMtmBBj8wQGHAAABAA38sGpHEfSxLx5MjQci dko1pKuV1W9rOK3y19A2J2N6rSdWYb7Zyzw8Gr7kTMWX1TP5WhRGCUhNRYnjI+4wgZIZdC lfGdp8MGI3HBg9CAr702BOzRTMnW0aqsGjrbhcwhWaDgRymhBh++nGAhHxeWn4ApJ8F6kT 8HaAm3dFYXpHCaZ/xuKPXr4DFugGl8MRDU8TwioNE9kRi0Ko/kB5LTHuGhMPHGshMJeVGi PQTrt9NAzgYyJeT9RB9VZadgElMvQ9S0+fo6ipOA== ---- END SSH2 PUBLIC KEY ----
" 7ZTVd7H63VyVqBIqfmEBALVa6VKtALZkydlOiPasikEQfujH07tjW+OffaRufFDG0VQESj 5iGSvMtmBBj8wQxGlvJ/dayVqBvvHzMao8bwGC+HFUtH1un7uyIEwOqU1fNzEpghC97mIx tIxJA7ZTVd7H63VIqmzlLbp/ZCd6bcJLvZEepMz96nlNB4NJ5UYIfdgXNhf/TrJD8COWQs t6jsP6RG/WrpHi5iGSvMtmBBj8wQGHddexkRnf/o5YMFJZRo4Iwc7+bgYrIyywBZnfLL7T RTk9TBfWzgJHy/y1tTtCMvVooWvFZbG5AiV3de63MxBaD0o68SASyXZzVM+MabXhjcdXFY 2vjq2vJxOzunEAAAAVAOTeOzDCnj3K5iGSvMtmBBj8wQGHAAABAA38sGpHEfSxLx5MjQci dko1pKuV1W9rOK3y19A2J2N6rSdWYb7Zyzw8Gr7kTMWX1TP5WhRGCUhNRYnjI+4wgZIZdC lfGdp8MGI3HBg9CAr702BOzRTMnW0aqsGjrbhcwhWaDgRymhBh++nGAhHxeWn4ApJ8F6kT 8HaAm3dFYXpHCaZ/xuKPXr4DFugGl8MRDU8TwioNE9kRi0Ko/kB5LTHuGhMPHGshMJeVGi PQTrt9NAzgYyJeT9RB9VZadgElMvQ9S0+fo6ipOA== ---- END SSH2 PUBLIC KEY ----4. 在本地主機上,創建 ~/.ssh2/identification 文件
在本地主機上創建以下文件。
$ vim ~/.ssh2/identification idKey id_dsa_2048_a
5. 在遠程主機上,將 SSH2 公鑰轉換為 OpenSSH 公鑰
這應該在運行 OpenSSH 的遠程主機上執行。只有 OpenSSH 可以在 OpenSSH 和 SSH2 格式之間來回轉換密鑰。
[remote-host]$ ssh-keygen -i -f ~/.ssh/id_dsa_1024_a.pub > \ ~/.ssh/id_dsa_1024_a_openssh.pub
將轉換后的 OpenSSH 公鑰從 ~/.ssh/id_dsa_1024_a_openssh.pub 文件復制到 authorized_keys 文件,如下所示。
[remote-host]$ vi ~/.ssh/authorized_keys ssh-dss 5iGSvMtmBBj8wQdegAEBALVa6VKtALZkydlOiPasikEQfujH07tjW+OffaRufFD G0VQESjq+YlVTWcXxStz0xGlvJ/dayVqBvvHzMao8bwGC+HFUtH1un7uyIEwOqU1fNzEpgh C97s143S8zBcTAGtdegte3IqmlLbp/ZCd6bcJLvZEepMz96nlNB4NJ5UYIfdgXNhf/TrJD8 COWQst6jsP6RG/WrpHiI4QVDM6tZVZ4CnGjm1QPkRnf/o5YMFJZRo4Iwc7+bgYrIyywBZnf LL7TRTk9TBfWzgJHy/y1tTtCMvVooWvFZbG5AiV3de63MxBaD0o68SASyXZzVM+MabXhjcd XFY2vjq2vJxOzunEAAAAVAOTeOzDCnj3K5iGSvMtmBBj8wQGHAAABAA38sGpHEfSxLx5MjQ dFYXpHCaZ/xuKPXr4DFugGl8MRDU8TwioNE9kRi0Ko/kB5LTHuGhMPHGshMJeVGiPQTrt9N AzgYyJeT9RB9VZadgElMvQ9S0+fo6ipOA==
6. 設置遠程主機對 .ssh 目錄的適當權限
在運行 openSSH 的遠程主機上,確保設置以下權限。沒有這個,你會遇到各種奇怪的 ssh 問題。
$ chmod 755 ~ $ chmod 755 ~/.ssh $ chmod 644 ~/.ssh/authorized_keys
7.使用SSH密鑰認證從local-host登錄到remote-host
如下所示從本地主機 (SSH2) 到遠程主機 (OpenSSH) 執行 ssh 以驗證基于密鑰的身份驗證是否正常工作。
[local-host]$ [You are on local-host here] [local-host]$ ssh -l tiamo remote-host Host key not found from database. Key fingerprint: bitaz-navun-gogus-mptop-ljilk-qwlem-ftrtm-llmak-topok-zuiof-bnmix You can get a public key's fingerprint by running % ssh-keygen -F publickey.pub on the keyfile. Are you sure you want to continue connecting (yes/no)? yes Host key saved to /home/tiamo/.ssh2/hostkeys/key_22_remote-host.pub host key for remote-host, accepted by tiamo Sun Oct 19 2020 15:06:42 -0700 Passphrase for key "/home/tiamo/.ssh2/id_dsa_2048_a" with comment "2048-bit dsa, tiamo@local-host, Sun Oct 19 2020 14:49:42 -0700":[Enter password] Last login: Sun Oct 19 14:01:48 2020 from 192.168.1.10 [remote-host]$ [You are on remote-host here]
注意:如果在從本地主機到遠程主機執行 ssh 或 scp 時出現以下錯誤,請參閱如何解決 SSH 上的算法協商失敗問題以解決此問題。
[local-host]$ ssh -l tiamo remote-host warning: Authentication failed. Disconnected; key exchange or algorithm negotiation failed (Algorithm negotiation failed.)
有兩種方法可以在不輸入密碼的情況下執行 ssh 和 scp:
無密碼:創建密鑰對時,將密碼留空。將此選項用于自動批處理。例如,如果您正在運行 cron 作業以在機器之間復制文件,這是合適的選項。您可以跳過此方法的后續步驟。
使用密碼和 SSH 代理:如果您從命令行以交互方式使用 ssh 和 scp,并且不想在每次執行 ssh 或 scp 時都使用密碼,我不建議使用前一個選項(無密碼),因為您已經在基于 ssh 密鑰的身份驗證中消除了一層安全性。相反,在創建密鑰對時使用密碼短語并使用 SSH 代理執行 ssh 和 scp,而無需每次都輸入密碼,如下面的步驟所述。
8. 在本地主機上啟動 SSH 代理
SSH 代理將在后臺運行以保存私鑰并執行 ssh 和 scp,而無需多次輸入密碼。
[local-host]$ ssh-agent $SHELL
9. 將私鑰加載到本地主機上的SSH代理
[local-host]$ ssh-add Adding identity: /home/tiamo/.ssh2/id_dsa_2048_a.pub Need passphrase for /home/tiamo/.ssh2/id_dsa_2048_a (2048-bit dsa, tiamo@local-host, Sun Oct 19 2020 14:49:42 -0700). Enter passphrase:[Enter your passphrase here]
10.從local-host到remote-home執行SSH或SCP,無需輸入密碼
[local-host]$ [You are on local-host here] [local-host]$ ssh -l tiamo remote-host Last login: Sun Oct 19 14:20:48 2020 from 192.168.1.10 [remote-host]$ [You are on remote-host here]
linux ssh
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。