ssh互信 ssh私钥免密登录
生活随笔
收集整理的這篇文章主要介紹了
ssh互信 ssh私钥免密登录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
環境相關:
OS:CentOS release 6.9
IP:192.168.77.10
1. 簡單解釋
ssh服務可以生成公私鑰,公私鑰的類型有兩種:rsa和dsa,作用是使用私鑰免輸入密碼登錄到公鑰所在的主機的用戶,這就是ssh的是要免密登錄。
ssh互信是指多個用戶之間相互配置免密登錄,可以是自己配置免密登錄自己,做互信用的公私鑰可以是多套也可以是一套。
下面介紹幾個常用的免密登錄或者互信的使用場景。
2. 相關目錄和權限說明
相關環境目錄和文件說明:
# 某用戶的ssh公私鑰所在目錄在用戶家目錄的.ssh目錄下 # 主機安裝后,如果該用戶從來沒有使用過ssh命令連接到任何主機,此時~/.ssh目錄是不存在的 # 不建議手動創建,使用一次ssh命令連接自己即可創建出來 useradd vincent echo vincent|passwd --stdin vincent su - vincent ls -la .ssh # ls: cannot access .ssh: No such file or directory ls -la ~/.ssh # ls: cannot access /home/vincent/.ssh: No such file or directory # 以英文據點開始的文件或者目錄是隱藏的,使用ls -a參數可以查看到ssh 127.0.0.1 # The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established. # RSA key fingerprint is 02:da:60:ad:4f:3e:d2:6b:33:b3:9a:27:d5:e3:80:e7. # Are you sure you want to continue connecting (yes/no)? # 顯示以上信息時.ssh目錄已經創建了,此時直接ctrl+c結束掉即可 # 也可以輸入yes回車,然后輸入密碼進行ssh登錄,以用戶自己登陸到主機的回環地址下的用戶自己ls -ld ~/.ssh/ # drwx------ 2 vincent vincent 4096 Jan 2 12:22 /home/vincent/.ssh/ # 如果要手動創建,則該目錄的權限要設置成700,不推薦手動創建,創建命令如下: # su - vincent # mkdir ~/.ssh # chmod 700 ~/.sshcd ~/.ssh # 上一步ctrl+c結束掉,此時該目錄為空 # 如果上一步沒有ctrl+c結束掉,正常登錄后該目錄會有一個叫做 known_hosts 文件 # 記錄已經連接過的主機信息ssh 127.0.0.1 # The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established. # RSA key fingerprint is 02:da:60:ad:4f:3e:d2:6b:33:b3:9a:27:d5:e3:80:e7. # Are you sure you want to continue connecting (yes/no)? yes # Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts. # 這一句警告就是說將 127.0.0.1 (RSA)信息添加到已知的主機信息中,即known_hosts文件中 # vincent@127.0.0.1's password: exit ls -l known_hosts # -rw-r--r-- 1 vincent vincent 391 Jan 2 12:32 known_hosts # 文件權限是644,完全沒有必要手動創建ssh -o StrictHostKeyChecking=no localhost # Warning: Permanently added 'localhost' (RSA) to the list of known hosts. # vincent@localhost's password: # Last login: Tue Jan 2 12:32:28 2018 from 127.0.0.1 exit # 如果不想在第一次連接到某主機某的用戶時交互的輸入yes(即known_hosts文件中沒有該主機的該用戶的信息) # 可以使用 -o StrictHostKeyChecking=no 參數默認自動添加未知主機到known_hosts文件中 # 這是一個非常技巧性的參數# 生成rsa的公私鑰 ssh-keygen -t rsa # 輸入該命令敲回車之后,還需要連續敲三次回車,當然每次回車之前是可以輸入一些信息的 # 比如第一次是指定生成的公私鑰文件名,一般建議默認,第二次和第三次是輸入密碼和確認密碼 ls -l # -rw------- 1 vincent vincent 1675 Jan 2 12:45 id_rsa # -rw-r--r-- 1 vincent vincent 397 Jan 2 12:45 id_rsa.pub # 文件id_rsa就是默認生成的私鑰文件,權限只能是600,如果不是這個權限,則會出問題 # 文件id_rsa.pub是默認生成的公鑰文件,權限是644# 理論上講只要某臺機器的某個用戶上有剛才生成的公鑰文件,那么用私鑰文件就能夠免密碼登錄到該機器 # 公鑰像鎖,私鑰像該鎖的鑰匙,把公鑰放到某主機的某用戶下,相當于在某用戶的門上安裝了一把自己有鑰匙的鎖 # 自己拿著鑰匙就能開鎖進門了 # 但是公鑰可能有很多個,比如多個用戶都要免密碼登錄到一個主機的某個用戶下 # 因此公鑰文件不能直接使用,而要生成另外一個文件存放所有公鑰用于免密登錄 cat id_rsa.pub >> authorized_keys chmod 600 authorized_keys ssh 127.0.0.1 date # 該文件的權限只能是600,否則也是無法免密登錄的 # ssh IP CMD 是指ssh到主機后執行命令CMD,然后退出主機# 以上配置authorized_keys文件是手工配置,是有正規的命令自動配置的 ssh-copy-id 127.0.0.1 # vincent@127.0.0.1's password: # Now try logging into the machine, with "ssh '127.0.0.1'", and check in: # .ssh/authorized_keys # to make sure we haven't added extra keys that you weren't expecting. # 推薦該操作 # 使用 ssh-copy-id 命令,會在authorized_keys不斷追加公鑰信息# 生成dsa的公私鑰 ssh-keygen -t dsa # 操作上只有這一個區別 # 一般只生成rsa的公私鑰即可3. 場景一:某用戶自己免密登錄自己
# 環境清理: rm -rf ~/.ssh # 正式開始設置: mkdir ~/.ssh chmod 700 ~/.ssh ssh-keygen -t rsa ssh-keygen -t dsa cd ~/.ssh cat *.pub >> authorized_keys # 因為生成了rsa和dsa的密鑰,因此需要將兩個公鑰文件內容寫入authorized_keys文件 chmod 600 authorized_keys ssh -o StrictHostKeyChecking=no 127.0.0.1 date ssh -o StrictHostKeyChecking=no localhost date ssh -o StrictHostKeyChecking=no $(hostname) date ssh -o StrictHostKeyChecking=no $(hostname -i) date # 以上四條命令是指連接到回環地址,回環地址主機名,主機名,主機名對外IP地址 # 這四條命令是必須要執行的,因為一般或者某些第三方程序測試互信的時候不會使用參數 -o StrictHostKeyChecking=no 的 # 此時known_hosts沒有相關信息,需要手動輸入yes,或者測試互信就直接失敗掉了 # 比如oracle的10gRAC搭建過程中測試互信的時候就會發生該類問題,導致互信檢測失敗4. 場景二:某用戶要批量控制多個主機多個用戶
rm -rf ~/.ssh mkdir ~/.ssh chmod 700 ~/.ssh ssh-keygen -t rsa ssh-keygen -t dsa # 配置私鑰 ssh-copy-id root@192.168.77.67 ssh -o StrictHostKeyChecking=no root@192.168.77.67 date # 當前用戶可以免密登錄到對應IP的root用戶,當前用戶是否為root,沒有限制 ssh-copy-id root@192.168.1.251 ssh -o StrictHostKeyChecking=no root@192.168.1.251 date # 多個網段也是可以的,只要IP和端口是通的即可5. 場景三:兩用戶(多用戶)互信
useradd vincent1 useradd vincent2 useradd vincent3 echo vincent|passwd --stdin vincent1 echo vincent|passwd --stdin vincent2 echo vincent|passwd --stdin vincent3 # 創建三個用戶作為實驗用模擬用戶su - vincent1 mkdir ~/.ssh chmod 700 ~/.ssh ssh-keygen -t rsa ssh-keygen -t dsa ssh-copy-id vincent1@127.0.0.1 ssh-copy-id vincent2@127.0.0.1 ssh-copy-id vincent3@127.0.0.1 ssh -o StrictHostKeyChecking=no vincent1@127.0.0.1 date ssh -o StrictHostKeyChecking=no vincent2@127.0.0.1 date ssh -o StrictHostKeyChecking=no vincent3@127.0.0.1 date exit # 配置vincent1的公私鑰,配置vincent1到自己和另外兩個用戶的免密登錄su - vincent2 mkdir ~/.ssh chmod 700 ~/.ssh ssh-keygen -t rsa ssh-keygen -t dsa ssh-copy-id vincent1@127.0.0.1 ssh-copy-id vincent2@127.0.0.1 ssh-copy-id vincent3@127.0.0.1 ssh -o StrictHostKeyChecking=no vincent1@127.0.0.1 date ssh -o StrictHostKeyChecking=no vincent2@127.0.0.1 date ssh -o StrictHostKeyChecking=no vincent3@127.0.0.1 date exit # 配置vincent2的公私鑰,配置vincent2到自己和另外兩個用戶的免密登錄su - vincent3 mkdir ~/.ssh chmod 700 ~/.ssh ssh-keygen -t rsa ssh-keygen -t dsa ssh-copy-id vincent1@127.0.0.1 ssh-copy-id vincent2@127.0.0.1 ssh-copy-id vincent3@127.0.0.1 ssh -o StrictHostKeyChecking=no vincent1@127.0.0.1 date ssh -o StrictHostKeyChecking=no vincent2@127.0.0.1 date ssh -o StrictHostKeyChecking=no vincent3@127.0.0.1 date exit # 配置vincent3的公私鑰,配置vincent3到自己和另外兩個用戶的免密登錄6. 場景四:全部一套公私鑰
所有的主機都是用同一套公私鑰和authorized_keys文件,這個情況是偷懶的方法,也容易留下后門,不推薦使用,如果有人攻破了你一臺主機,那么相當于你的所有機器都被攻破:
mkdir ~/.ssh chmod 700 ~/.ssh ssh-keygen -t rsa ssh-keygen -t dsa cd ~/.ssh cat *.pub >> authorized_keys scp -r ~/.ssh USER@IP:~/ # 使用scp 分發該目錄,分發到哪里,哪里就能相互的直接互信 # 相當方便,但請不要跟別人講是從本博文看到的方法。┏(゜ω゜)=? 走你。[TOC]
總結
以上是生活随笔為你收集整理的ssh互信 ssh私钥免密登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity3d 室内设计Shader效果
- 下一篇: 考勤管理软件对企业管理非常重要