ssh除了密碼驗證外,還有一種比較常用的驗證方式:key;他的好處除了安全外,還可以實作linux之間的免密碼登陸 ,友善管理或者批量維護。
本文介紹一下windows/linux下如何配置key免密碼登陸linux伺服器
<code>01</code>
<code>[root@a ~]</code><code># ssh-keygen -t rsa</code>
<code>02</code>
<code>03</code>
<code>generating public/private rsa key pair.</code>
<code>04</code>
<code>05</code>
<code>enter </code><code>file</code> <code>in</code> <code>which</code> <code>to save the key (/root/.</code><code>ssh</code><code>/id_rsa):</code>
<code>06</code>
<code>//key儲存的路徑和檔案名</code>
<code>07</code>
<code>08</code>
<code>enter passphrase (empty </code><code>for</code> <code>no passphrase):</code>
<code>09</code>
<code>10</code>
<code>//key的密碼,免密碼登陸的話留白</code>
<code>11</code>
<code>12</code>
<code>enter same passphrase again:</code>
<code>13</code>
<code>14</code>
<code>your identification has been saved </code><code>in</code> <code>/root/.</code><code>ssh</code><code>/id_rsa</code>
<code>15</code>
<code>16</code>
<code>//生成了私鑰/root.</code><code>ssh</code><code>/id_rsa</code>
<code>17</code>
<code>18</code>
<code>your public key has been saved </code><code>in</code> <code>/root/.</code><code>ssh</code><code>/id_rsa.pub</code>
<code>19</code>
<code>20</code>
<code>//生成了公鑰 /root/.</code><code>ssh</code><code>/id_rsa.pub</code>
<code>21</code>
<code>22</code>
<code>the key fingerprint is:</code>
<code>23</code>
<code>24</code>
<code>82:8c:2c:52:06:c6:f3:c4:1c:1c:35:b7:</code><code>cd</code><code>:5b:42:a2 root@a</code>
<code>25</code>
<code>26</code>
<code>[root@a ~]</code><code># ls /root/.ssh/ //檢視一下目錄,已經有了這兩個檔案</code>
<code>27</code>
<code>28</code>
<code>authorized_keys id_rsa id_rsa.pub known_hosts</code>
<code>29</code>
<code>30</code>
<code>[root@a ~]</code><code>#</code>
檢視一下伺服器ssh服務公鑰存放的路徑
<code>1</code>
<code>[root@a ~]</code><code># cat /etc/ssh/sshd_config |grep authorizedkeysfile</code>
<code>2</code>
<code>3</code>
<code>#authorizedkeysfile .ssh/authorized_keys</code>
預設伺服器儲存公鑰的位置是.ssh/authorizedkeysfile
是以需要将生成的公鑰檔案通過scp或者任何方法拷貝到你需要遠端登入的伺服器的這個檔案中
<code>[root@b ~]</code><code># cd .ssh/</code>
<code>[root@b .</code><code>ssh</code><code>]</code><code># cat id_rsa.pub >authorized_keys</code>
<code>//伺服器本地</code><code>ssh</code><code>用戶端預設讀取的私鑰路徑已經包含了/.</code><code>ssh</code><code>/id_rsa</code>
<code>[root@a .</code><code>ssh</code><code>]</code><code># cat /etc/ssh/ssh_config |grep identityfile</code>
<code># identityfile ~/.ssh/identity</code>
<code># identityfile ~/.ssh/id_rsa</code>
<code># identityfile ~/.ssh/id_dsa</code>
至此你可以直接從a 執行指令ssh ipb
登入到伺服器b了,就這麼簡單。
有一種簡單的方法:使用指令ssh-copy-id 直接将本機的key加入到對方伺服器的驗證檔案中
<code>[root@a .</code><code>ssh</code><code>]</code><code># ssh-copy-id</code>
<code>usage: /usr/bin/</code><code>ssh</code><code>-copy-</code><code>id</code> <code>[-i [identity_file]] [user@]machine</code>
<code>[root@a .</code><code>ssh</code><code>]</code><code># ssh-copy-id -i /root/.ssh/id_rsa root@ipb</code>
<code>the authenticity of host </code><code>'ipb (ipb)'</code> <code>can't be established.</code>
<code>rsa key fingerprint is 17:21:32:02:da:3b:a1:d1:a2:69:12:36:a2:d7:59:ad.</code>
<code>are you sure you want to </code><code>continue</code> <code>connecting (</code><code>yes</code><code>/no)? </code><code>yes</code>
<code>root@ipb's password:</code>
<code>now try logging into the machine, with </code><code>"ssh 'root@ipb'"</code><code>, and check </code><code>in</code><code>:</code>
<code>.</code><code>ssh</code><code>/authorized_keys</code>
<code>[root@a ~]</code><code># ssh ipb</code>
<code>last login: sun dec 15 19:33:07 2013 from ipa</code>
<code>[root@b ~]</code><code>#</code>
這樣執行之後,就可以直接登陸伺服器了。
上面都是通過linux的ssh用戶端來連接配接,如果通過本地來使用key登陸的話方法大同小異;
将私鑰id_rsa下載下傳到本地,然後導入到用戶端的密鑰認證配置的地方即可;
以securecrt為例,配置位置如下圖選擇下載下傳下來的私鑰檔案即可。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuEzMx8CXyEzLcNTMwIzLcNHZh9GbwV3LcRnblRnbvNWLwd3Lc52YuEWaqVGauNmL3d3dvw1LcpDc0RHaiojIsJye.png)