通过key登录ssh
http://fungo.me/linux/ssh-with-key.html
這里介紹下如何通過”公私鑰”認(rèn)證的方式來進(jìn)行ssh登錄. “公私鑰”認(rèn)證方式簡(jiǎn)單的解釋:首先在客戶端上創(chuàng)建一對(duì)公私鑰 (公鑰文件:~/.ssh/id_rsa.pub; 私鑰文件:~/.ssh/id_rsa)
然后把公鑰放到服務(wù)器上(~/.ssh/authorized_keys), 自己保留好私鑰.在使用ssh登錄時(shí),ssh程序會(huì)發(fā)送私鑰去和服務(wù)器上的公鑰做匹配.如果匹配成功就可以登錄了
在本地產(chǎn)生私鑰和公鑰
$ ssh-keygen -t rsa
也可以加參數(shù)明確指定私鑰的名字
| 1 | $ ssh-keygen -t rsa -f ~/.ssh/id_rsa.work |
提示輸入passphrase時(shí)可以不輸,這樣用生成的key登錄時(shí)就是通常所說的無密碼登錄。不過還是建議給一個(gè)passphrase,這樣即使別人拿到私鑰也不能登錄。
然后ssh-copy-id命令把生成的公鑰追加到遠(yuǎn)程主機(jī)的.ssh/authorized_keys 上
| 1 | $ ssh-copy-id-i ~/.ssh/id_rsa.pub? username@hostip |
或者scp, sftp之類的工具把id_rsa.pub傳到遠(yuǎn)程主機(jī)上,然后追加到authorized_keys后面
| 1 2 | $ cd/path/to/uploaded_id_rsa.pub_folder $ cat./d_rsa.pub >> ~/.ssh/authorized_keys |
如果遠(yuǎn)程主機(jī)之前沒有authorized_keys,要
$ chmod 600 ~/.ssh/authorized_keys
權(quán)限不是600會(huì)出問題
修改服務(wù)端的配置文件sshd_config,添加
PasswordAuthentication no
重啟ssh即可
| 1 | /etc/init.d/sshreatart |
然后客戶端就可以通過key來登錄了。。
上面是對(duì)客戶端為linux的情況,如要是winodws系統(tǒng),我們一般會(huì)用putty這個(gè)工具,產(chǎn)生公鑰私鑰對(duì)要用到puttygen這個(gè)工具,putty主頁上有下載。
點(diǎn)擊generate后就開始生成,生成過程中鼠標(biāo)要在空白區(qū)不停的移動(dòng)。
生成完后就可以保存了,會(huì)提示是否要passphrase來保護(hù)私鑰,推薦寫上,如果不寫的話就是無密碼登錄。
putty生成的key格式和linux的OpenSSH所采用的不一樣,要轉(zhuǎn)換為OpenSSH格式
然后就可以把公鑰上傳到服務(wù)端了。方法和linux類似,上傳完成后就可以能過putty來登錄了,在登錄前要配置一下,讓putty找到生成的私鑰。
下面說下linux下多個(gè)私鑰的情況。
如果我們有多個(gè)linux server來管理,又都想key登錄,就要配置.ssh/config這個(gè)文件了
內(nèi)容類似這樣
參考multiple ssh private keys
| 01 02 03 04 05 06 07 08 09 10 11 12 13 | Host *.home.lan ??IdentityFile ~/.ssh/id_dsa.home ??User kbsingh ?? Host *.vpn ??IdentityFile ~/.ssh/id_rsa.work ??User karanbir ??Port 44787 ?? Host *.d0.karan.org ??IdentityFile ~/.ssh/id_rsa.d0 ??User admin ??Port 21871 |
如果公鑰丟了,我們可以通過私鑰來生成
linux下ssh-keygen 加上y參數(shù)
| 1 | $ ssh-keygen -t dsa -y > ~/.ssh/id_dsa.pub |
windows下可用puttygen來做,比較簡(jiǎn)單。
解釋下Passphrase
Passphrase,即密碼短語,是綁定在SSH Key上的一層密碼,和服務(wù)器的Password是沒有關(guān)系的,Passphrase的創(chuàng)建,修改和刪除都只需用戶在客戶端軟件上完成就可以了。
有人認(rèn)為通過key這種方式還不夠安全,想通過key和服務(wù)器的密碼兩層驗(yàn)證來登錄,不過用的服務(wù)端不是OpenSSH了,因?yàn)镺penSSH不支持同時(shí)進(jìn)行兩種驗(yàn)證。可以看下這里讓Linux登陸支持SSH Key和Password兩級(jí)驗(yàn)證
?
?
===========
http://lhflinux.blog.51cto.com/1961662/526122
http://blog.lizhigang.net/archives/249
linux ssh 使用深度解析(key登錄詳解)
SSH全稱Secure SHell,顧名思義就是非常安全的shell的意思,SSH協(xié)議是IETF(Internet Engineering Task Force)的Network Working Group所制定的一種協(xié)議。SSH的主要目的是用來取代傳統(tǒng)的telnet和R系列命令(rlogin,rsh,rexec等)遠(yuǎn)程登陸和遠(yuǎn)程執(zhí)行命令的工具,實(shí)現(xiàn)對(duì)遠(yuǎn)程登陸和遠(yuǎn)程執(zhí)行命令加密。防止由于網(wǎng)絡(luò)監(jiān)聽而出現(xiàn)的密碼泄漏,對(duì)系統(tǒng)構(gòu)成威脅。ssh協(xié)議目前有SSH1和SSH2,SSH2協(xié)議兼容SSH1。目前實(shí)現(xiàn)SSH1和SSH2協(xié)議的主要軟件有OpenSSH和SSH Communications Security Corporation 公司的SSH Communications 軟件。前者是OpenBSD組織開發(fā)的一款免費(fèi)的SSH軟件,后者是商業(yè)軟件,因此在linux、FreeBSD、OpenBSD、NetBSD等免費(fèi)類UNIX系統(tǒng)種,通暢都使用OpenSSH作為SSH協(xié)議的實(shí)現(xiàn)軟件。因此,本文重點(diǎn)介紹一下OpenSSH的使用。需要注意的是OpenSSH和SSH Communications的登陸公鑰/私鑰的格式是不同的,如果想用SSH Communications產(chǎn)生的私鑰/公鑰對(duì)來登入到使用OpenSSH的linux系統(tǒng)需要對(duì)公鑰/私鑰進(jìn)行格式轉(zhuǎn)換。
在出現(xiàn)SSH之前,系統(tǒng)管理員需要登入遠(yuǎn)程服務(wù)器執(zhí)行系統(tǒng)管理任務(wù)時(shí),都是用telnet來實(shí)現(xiàn)的,telnet協(xié)議采用明文密碼傳送,在傳送過程中對(duì)數(shù)據(jù)也不加密,很容易被不懷好意的人在網(wǎng)絡(luò)上監(jiān)聽到密碼。同樣,在SSH工具出現(xiàn)之前R系列命令也很流行(由于這些命令都以字母r開頭,故把這些命令合稱為R系列命令R是remote的意思),比如rexec是用來執(zhí)行遠(yuǎn)程服務(wù)器上的命令的,和telnet的區(qū)別是telnet需要先登陸遠(yuǎn)程服務(wù)器再實(shí)行相關(guān)的命令,而R系列命令可以把登陸和執(zhí)行命令并登出系統(tǒng)的操作整合在一起。這樣就不需要為在遠(yuǎn)程服務(wù)器上執(zhí)行一個(gè)命令而特地登陸服務(wù)器了。 SSH是一種加密協(xié)議,不僅在登陸過程中對(duì)密碼進(jìn)行加密傳送,而且對(duì)登陸后執(zhí)行的命令的數(shù)據(jù)也進(jìn)行加密,這樣即使別人在網(wǎng)絡(luò)上監(jiān)聽并截獲了你的數(shù)據(jù)包,他也看不到其中的內(nèi)容。OpenSSH已經(jīng)是目前大多數(shù)linux和BSD操作系統(tǒng)(甚至cygwin)的標(biāo)準(zhǔn)組件,因此關(guān)于如何安裝OpenSSH本文就不再敘述了,如果不出意外,你的系統(tǒng)上必定已經(jīng)安裝好了OpenSSH。
OpenSSH軟件包包含以下命令:
sshd ―― SSH服務(wù)端程序
sftp-server ―― SFTP服務(wù)端程序(類似FTP但提供數(shù)據(jù)加密的一種協(xié)議)
scp ―― 非交互式sftp-server的客戶端,用來向服務(wù)器上傳/下載文件
sftp ―― 交互式sftp-server客戶端,用法和ftp命令一樣。
slogin ―― ssh的別名
ssh ―― SSH協(xié)議的客戶端程序,用來登入遠(yuǎn)程系統(tǒng)或遠(yuǎn)程執(zhí)行命令
ssh-add ―― ? ?SSH代理相關(guān)程序,用來向SSH代理添加dsa key
ssh-agent ―― ? ?ssh代理程序
ssh-keyscan ―― ssh public key 生成器
SSH最常用的使用方式是代替telnet進(jìn)行遠(yuǎn)程登陸。不同于telnet的密碼登陸,SSH還同時(shí)支持Publickey、Keybord Interactive、GSSAPI等多種登入方式,不像telnet那樣只有輸入系統(tǒng)密碼一種途徑。目前最常用的登陸方式還是傳統(tǒng)的Password方式和Publickey方式登陸。下面以Redhat AS4為例,舉例說明這兩種登陸方式的用法。
[root@mail ~]# ssh 172.18.6.227
The authenticity of host ’172.18.6.227 (172.18.6.227)’ can’t be established.
RSA key fingerprint is 43:80:f2:e1:9b:b6:6e:c0:e2:dd:57:8f:ed:89:b3:81.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ’172.18.6.227′ (RSA) to the list of known hosts.
root@172.18.6.227‘s password:?
Last login: Thu Jul 12 18:47:47 2007 from 172.18.6.130
[root@qmail ~]#
第一次登陸后,ssh就會(huì)把登陸的ssh指紋存放在用戶home目錄的.ssh目錄的know_hosts文件中,如果遠(yuǎn)程系統(tǒng)重裝過系統(tǒng),ssh指紋已經(jīng)改變,你需要把 .ssh 目錄下的know_hosts中的相應(yīng)指紋刪除,再登陸回答yes,方可登陸。請(qǐng)注意.ssh目錄是開頭是”.”的隱藏目錄,需要ls –a參數(shù)才能看到。而且這個(gè)目錄的權(quán)限必須是700,并且用戶的home目錄也不能給其他用戶寫權(quán)限,否則ssh服務(wù)器會(huì)拒絕登陸。如果發(fā)生不能登陸的問題,請(qǐng)察看服務(wù)器上的日志文件/var/log/secure。通常能很快找到不能登陸的原因。
ssh遠(yuǎn)程執(zhí)行命令:
[root@mail ~]# ssh 172.18.6.227 ls -l /
root@172.18.6.227‘s password:?
total 1244
drwxr-xr-x? ? 2 root root? ? 4096 Jun 26 04:02 bin
drwxr-xr-x? ? 4 root root? ? 4096 Mar 29 11:17 boot
drwxr-xr-x? ? 2 root root? ? 4096 Jan 25 11:26 command
drwxr-xr-x? ?15 root root? ? 4096 Jun 12 20:09 data
drwxr-xr-x? ? 9 root root? ? 5360 Jul??2 13:38 dev
drwxr-xr-x? ?87 root root? ?12288 Jul 11 04:02 etc
drwxr-xr-x? ?20 root root? ? 4096 Apr 10 10:54 home
drwxr-xr-x? ? 2 root root? ? 4096 Aug 13??2004 initrd
輸入正確的密碼后,ssh會(huì)鏈接遠(yuǎn)程服務(wù)器的sshd服務(wù)器程序,然后執(zhí)行遠(yuǎn)程服務(wù)器上的
ls –l /命令 ,并把輸入結(jié)果傳到本地服務(wù)器。相當(dāng)于你先登陸到遠(yuǎn)程服務(wù)器,然后再實(shí)行命令ls –l /,最后再登出服務(wù)器。需要提醒的是,如果你需要登陸服務(wù)器并執(zhí)行不止一個(gè)命令,必須要把命令用單引號(hào)或雙引號(hào)引起來:
ssh 172.18.6.227 “cd /root && ls “
ssh的遠(yuǎn)程實(shí)行命令的功能是用來代替原始的R系列命令的,在ssh出現(xiàn)之前系統(tǒng)管理員們不得不用rexec, rsh等不安全的遠(yuǎn)程執(zhí)行命令工具來完成同樣的操作。這個(gè)功能在管理大批機(jī)器的時(shí)候是非常有用的,比如我要重啟10.0.0.0/24網(wǎng)段內(nèi)所有的服務(wù)器,只要輸入一條命令:
for i in $(seq 1 254) ; do??ssh 10.0.0.${i} reboot ; done
就可以完成重啟所有服務(wù)器的操作,也許你會(huì)說,這要雖然不需要再登陸每一臺(tái)服務(wù)器了,但是還是要每次輸入密碼,多麻煩啊。別急,下面要講的用ssh public key方式登陸就是要解決問題。
采用public key登錄:
openssh的ssh-keygen命令用來產(chǎn)生這樣的私鑰和公鑰。
[root@mail ~]# ssh-keygen -b 1024 -t dsa -C?gucuiwen@myserver.com
Generating public/private dsa key pair.
#提示正在生成,如果選擇4096長(zhǎng)度,可能需要較長(zhǎng)時(shí)間
Enter file in which to save the key (/root/.ssh/id_dsa):?
#詢問把公鑰和私鑰放在那里,回車用默認(rèn)位置即可
Enter passphrase (empty for no passphrase):?
#詢問輸入私鑰密語,為了實(shí)現(xiàn)自動(dòng)登陸,應(yīng)該不要密語,直接回車
Enter same passphrase again:?
#再次提示輸入密語,再次直接回車
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
#提示公鑰和私鑰已經(jīng)存放在/root/.ssh/目錄下
The key fingerprint is:
71:e5:cb:15:d3:8c:05:ed:05:84:85:32:ce:b1:31:ce?gucuiwen@myserver.com
#提示key的指紋
說明:
-b 1024 采用長(zhǎng)度為1024字節(jié)的公鑰/私鑰對(duì),最長(zhǎng)4096字節(jié),一般1024或2048就可以了,太長(zhǎng)的話加密解密需要的時(shí)間也長(zhǎng)。
-t dsa 采用dsa加密方式的公鑰/私鑰對(duì),除了dsa還有rsa方式,rsa方式最短不能小于768字節(jié)長(zhǎng)度。
-C?gucuiwen@myserver.com 對(duì)這個(gè)公鑰/私鑰對(duì)的一個(gè)注釋和說明,一般用所有人的郵件代替。可以省略不寫,更多其他參數(shù)請(qǐng)man ssh-keygen。
[root@mail ~]# ls -l /root/.ssh
total 16
-rw——-??1 root root 668 Jul 12 20:07 id_dsa
-rw-r–r–??1 root root 611 Jul 12 20:07 id_dsa.pub
-rw-r–r–??1 root root 222 Jul 12 19:37 known_hosts
產(chǎn)生的公鑰/私鑰文件在用戶home目錄的.ssh目錄下,其中id_dsa.pub是公鑰,把產(chǎn)生的公鑰上傳到需要登陸的服務(wù)器的對(duì)應(yīng)用戶目錄的home目錄的.ssh目錄下,再一次強(qiáng)調(diào)用戶自己的目錄(home目錄)必須不能有其他人可寫的權(quán)限,.ssh目錄的權(quán)限必須是700,即除了用戶自己,其他人沒有任何讀寫察看該目錄的權(quán)限,否則ssh服務(wù)器會(huì)拒絕登陸。ssh默認(rèn)的公鑰文件是用戶home目錄下的.ssh目錄下的authorized_keys文件,因此需要把產(chǎn)生的公鑰以這個(gè)文件名放到服務(wù)器的/root/.ssh/目錄下,這個(gè)文件中可以存放多個(gè)客戶端的公鑰文件,就好比一個(gè)大門上可以上很多鎖,可以有不同的鑰匙來嘗試開鎖,只要有一個(gè)鎖被打開了,門就可以打開了。放到服務(wù)器上應(yīng)該是這樣子的:
私鑰必須是600權(quán)限,否則ssh服務(wù)器會(huì)拒絕用戶登陸。
大致就是這個(gè)樣子了。現(xiàn)把/etc/ssh/ssh_config 和 /etc/ssh/sshd_config的配置說下。
/etc/ssh/ssh_config:
Host *
選項(xiàng)“Host”只對(duì)能夠匹配后面字串的計(jì)算機(jī)有效。“*”表示所有的計(jì)算機(jī)。
ForwardAgent no
“ForwardAgent”設(shè)置連接是否經(jīng)過驗(yàn)證代理(如果存在)轉(zhuǎn)發(fā)給遠(yuǎn)程計(jì)算機(jī)。
ForwardX11 no
“ForwardX11”設(shè)置X11連接是否被自動(dòng)重定向到安全的通道和顯示集(DISPLAY set)。
RhostsAuthentication no
“RhostsAuthentication”設(shè)置是否使用基于rhosts的安全驗(yàn)證。
RhostsRSAAuthentication no
“RhostsRSAAuthentication”設(shè)置是否使用用RSA算法的基于rhosts的安全驗(yàn)證。
RSAAuthentication yes
“RSAAuthentication”設(shè)置是否使用RSA算法進(jìn)行安全驗(yàn)證。
PasswordAuthentication yes
“PasswordAuthentication”設(shè)置是否使用口令驗(yàn)證。
FallBackToRsh no
“FallBackToRsh”設(shè)置如果用ssh連接出現(xiàn)錯(cuò)誤是否自動(dòng)使用rsh。
UseRsh no
“UseRsh”設(shè)置是否在這臺(tái)計(jì)算機(jī)上使用“rlogin/rsh”。
BatchMode no
“BatchMode”如果設(shè)為“yes”,passphrase/password(交互式輸入口令)的提示將被禁止。當(dāng)不能交互式輸入口令的時(shí)候,這個(gè)選項(xiàng)對(duì)腳本文件和批處理任務(wù)十分有用。
CheckHostIP yes
“CheckHostIP”設(shè)置ssh是否查看連接到服務(wù)器的主機(jī)的IP地址以防止DNS欺騙。建議設(shè)置為“yes”。
StrictHostKeyChecking no
“StrictHostKeyChecking”如果設(shè)置成“yes”,ssh就不會(huì)自動(dòng)把計(jì)算機(jī)的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦計(jì)算機(jī)的密匙發(fā)生了變化,就拒絕連接。
IdentityFile ~/.ssh/identity
“IdentityFile”設(shè)置從哪個(gè)文件讀取用戶的RSA安全驗(yàn)證標(biāo)識(shí)。
Port 22
“Port”設(shè)置連接到遠(yuǎn)程主機(jī)的端口。
Cipher blowfish
“Cipher”設(shè)置加密用的密碼。
EscapeChar ~
“EscapeChar”設(shè)置escape字符。
/etc/ssh/sshd_config:
Port 22
“Port”設(shè)置sshd監(jiān)聽的端口號(hào)。
ListenAddress 192.168.1.1
“ListenAddress”設(shè)置sshd服務(wù)器綁定的IP地址。
HostKey /etc/ssh/ssh_host_key
“HostKey”設(shè)置包含計(jì)算機(jī)私人密匙的文件。
ServerKeyBits 1024
“ServerKeyBits”定義服務(wù)器密匙的位數(shù)。
LoginGraceTime 600
“LoginGraceTime”設(shè)置如果用戶不能成功登錄,在切斷連接之前服務(wù)器需要等待的時(shí)間(以秒為單位)。
KeyRegenerationInterval 3600
“KeyRegenerationInterval”設(shè)置在多少秒之后自動(dòng)重新生成服務(wù)器的密匙(如果使用密匙)。重新生成密匙是為了防止用盜用的密匙解密被截獲的信息。
PermitRootLogin no
“PermitRootLogin”設(shè)置root能不能用ssh登錄。這個(gè)選項(xiàng)一定不要設(shè)成“yes”。
IgnoreRhosts yes
“IgnoreRhosts”設(shè)置驗(yàn)證的時(shí)候是否使用“rhosts”和“shosts”文件。
IgnoreUserKnownHosts yes
“IgnoreUserKnownHosts”設(shè)置ssh daemon是否在進(jìn)行RhostsRSAAuthentication安全驗(yàn)證的時(shí)候忽略用戶的“$HOME/.ssh/known_hosts”
StrictModes yes
“StrictModes”設(shè)置ssh在接收登錄請(qǐng)求之前是否檢查用戶家目錄和rhosts文件的權(quán)限和所有權(quán)。這通常是必要的,因?yàn)樾率纸?jīng)常會(huì)把自己的目錄和文件設(shè)成任何人都有寫權(quán)限。
X11Forwarding no
“X11Forwarding”設(shè)置是否允許X11轉(zhuǎn)發(fā)。
PrintMotd yes
“PrintMotd”設(shè)置sshd是否在用戶登錄的時(shí)候顯示“/etc/motd”中的信息。
SyslogFacility AUTH
“SyslogFacility”設(shè)置在記錄來自sshd的消息的時(shí)候,是否給出“facility code”。
LogLevel INFO
“LogLevel”設(shè)置記錄sshd日志消息的層次。INFO是一個(gè)好的選擇。查看sshd的man幫助頁,已獲取更多的信息。
RhostsAuthentication no
“RhostsAuthentication”設(shè)置只用rhosts或“/etc/hosts.equiv”進(jìn)行安全驗(yàn)證是否已經(jīng)足夠了。
RhostsRSAAuthentication no
“RhostsRSA”設(shè)置是否允許用rhosts或“/etc/hosts.equiv”加上RSA進(jìn)行安全驗(yàn)證。
RSAAuthentication yes
“RSAAuthentication”設(shè)置是否允許只有RSA安全驗(yàn)證。
PasswordAuthentication yes
“PasswordAuthentication”設(shè)置是否允許口令驗(yàn)證。
PermitEmptyPasswords no
“PermitEmptyPasswords”設(shè)置是否允許用口令為空的帳號(hào)登錄。
AllowUsers admin
“AllowUsers”的后面可以跟著任意的數(shù)量的用戶名的匹配串(patterns)或user@host這樣的匹配串,這些字符串用空格隔開。主機(jī)名可以是DNS名或IP地址。
將SSH2兼容格式的公鑰轉(zhuǎn)換成為Openssh兼容格式
ssh-keygen -i -f Identity.pub >> /root/.ssh/authorized_keys2
?
?
================
http://bbs.chinaunix.net/thread-2028068-1-1.html
http://scottttocs.blog.163.com/blog/static/148583971201132124412721/
ssh/sftp 無需密碼登錄遠(yuǎn)端機(jī)設(shè)置----ssh-keygen??
製作 public keys private keys 利用 ssh-keygen 來做出公用和私有鑰匙,並傳送 public key 到遠(yuǎn)端機(jī)器使其信任本機(jī)登入。在本地機(jī)器:
1.[steven@tsslinux2]$ ssh-keygen -t dsa
generating public/private dsa key pair.
enter file in which to save the key (/home/steven/.ssh/id_dsa):
enter passphrase (empty for no passphrase): - 不用輸入
enter same passphrase again: - 不用輸入
your identification has been saved in /home/steven/.ssh/id_dsa.
your public key has been saved in /home/steven/.ssh/id_dsa.pub.
the key fingerprint is:
fa:c9:a9:e4:d5:70:52:88:cc:f3:25:fd:68:ae:c4:4b
steven@tsslinux2.au.ibm.com
2.接著,再到 /home/steven/.ssh 裡看看,會(huì)多出 id_dsa 和 id_dsa.pub 這兩個(gè)檔案:
[steven@tsslinux2]$ cd .ssh
[steven@tsslinux2]$ ls
id_dsa id_dsa.pub known_hosts
3.復(fù)制文件到遠(yuǎn)端(目標(biāo)登錄)機(jī)器
[steven@tsslinux2]$ scp id_dsa.pub? shuai@linscm1:~/.ssh/
在遠(yuǎn)端機(jī)器:
[shuai@linscm1]$cd ~/.ssh
[shuai@linscm1]mv id_dsa.pub authorized_keys
有時(shí)候不能work, 則改用
[shuai@linscm1]cat id_dsa.pub >> authorized_keys; rm id_dsa.pub?? (我想>>是可以信任多臺(tái)機(jī)器的原因吧)
[shuai@linscm1]chmod 644 authorized_key
完成後離開,回到本機(jī),如此就不用輸入密碼就直接登入了!
?
?===============
用本地機(jī)器用戶目錄下的私鑰去匹配遠(yuǎn)程機(jī)器上對(duì)應(yīng)用戶的公鑰,可以用sftp -i 指定私鑰文件位置
?
==============
http://phoenix007.iteye.com/blog/709455
A機(jī)器(ssh連接發(fā)起端,即客戶端):
?
添加一個(gè)測(cè)試用戶aaa
?
[root@A ~]# useradd aaa
?
su成aaa
?
[root@A ~]# su - aaa
[aaa@A ~]$
?
ssh-keygen創(chuàng)建rsa密鑰對(duì)
?
[aaa@A ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/aaa/.ssh/id_rsa): ????? 密鑰文件的保存位置
Created directory '/home/aaa/.ssh'.????????????? 默認(rèn)的密鑰文件存放目錄
Enter passphrase (empty for no passphrase):????????????? 密鑰文件的保護(hù)密碼
Enter same passphrase again:
Your identification has been saved in /home/aaa/.ssh/id_rsa.????????????? 生成的私鑰
Your public key has been saved in /home/aaa/.ssh/id_rsa.pub.??? 生成的公鑰
The key fingerprint is:
81:d7:de:e7:cb:7c:4e:16:d6:76:da:9d:30:25:76:09 aaa@A.test.com
?
[aaa@A ~]$ ll
total 32K
drwx------? 3 aaa? aaa? 4.0K Sep 17 16:09 .
drwxr-xr-x? 4 root root 4.0K Sep 17 16:09 ..
-rw-r--r--? 1 aaa? aaa?? 304 Sep 17 16:09 .bash_logout
-rw-r--r--? 1 aaa? aaa?? 191 Sep 17 16:09 .bash_profile
-rw-r--r--? 1 aaa? aaa?? 124 Sep 17 16:09 .bashrc
-rw-r--r--? 1 aaa? aaa?? 383 Sep 17 16:09 .emacs
drwx------? 2 aaa? aaa? 4.0K Sep 17 16:09 .ssh????????????? 創(chuàng)建出的.ssh目錄默認(rèn)權(quán)限為700
?
注意生成的私鑰文件的默認(rèn)權(quán)限是rw-------,即600(確保他人不能查看)
?
[aaa@A ~]$ ll .ssh/
total 16K
drwx------? 2 aaa aaa 4.0K Sep 17 16:09 .
drwx------? 3 aaa aaa 4.0K Sep 17 16:09 ..
-rw-------? 1 aaa aaa? 951 Sep 17 16:09 id_rsa???????? 私鑰文件
-rw-r--r--? 1 aaa aaa? 231 Sep 17 16:09 id_rsa.pub?? 公鑰文件
B機(jī)器(ssh的被連接端,即服務(wù)端):
?
添加bbb用戶
?
[root@B ~]# useradd bbb
?
su成bbb
?
[root@B ~]# su - bbb
?
手工在家目錄下建立.ssh目錄(如果不使用ssh-keygen工具的話)
?
[bbb@B ~]$ mkdir .ssh
?
[bbb@B ~]$ ls -al
total 28
drwx------? 3 bbb? bbb? 4096 Sep 17 16:52 .
drwxr-xr-x? 4 root root 4096 Sep 17 16:52 ..
-rw-r--r--? 1 bbb? bbb?? 304 Sep 17 16:52 .bash_logout
-rw-r--r--? 1 bbb? bbb?? 191 Sep 17 16:52 .bash_profile
-rw-r--r--? 1 bbb? bbb?? 124 Sep 17 16:52 .bashrc
drwxrwxr-x? 2 bbb? bbb? 4096 Sep 17 16:52 .ssh
?
修改.ssh目錄的權(quán)限為700(非常重要!)
?
[bbb@B ~]$ chmod 700 .ssh
?
[bbb@B ~]$ ls -al
total 28
drwx------? 3 bbb? bbb? 4096 Sep 17 16:52 .
drwxr-xr-x? 4 root root 4096 Sep 17 16:52 ..
-rw-r--r--? 1 bbb? bbb?? 304 Sep 17 16:52 .bash_logout
-rw-r--r--? 1 bbb? bbb?? 191 Sep 17 16:52 .bash_profile
-rw-r--r--? 1 bbb? bbb?? 124 Sep 17 16:52 .bashrc
drwx------? 2 bbb? bbb? 4096 Sep 17 16:52 .ssh???? 確認(rèn)權(quán)限為700
?
在.ssh目錄里創(chuàng)建authorized_keys文件,并將A機(jī)器上aaa用戶的公鑰(id_rsa.pub)內(nèi)容寫入此文件(關(guān)鍵操作!)
?
[bbb@B ~]$ cd .ssh/
?
[bbb@B .ssh]$ vi authorized_keys
?
粘貼aaa的id_rsa.pub內(nèi)容進(jìn)來
?
修改authorized_keys的權(quán)限為400(非常重要!)
?
[bbb@B .ssh]$ chmod 400 authorized_keys
?
[bbb@B .ssh]$ ls -l authorized_keys
-r--------? 1 bbb bbb 231 Sep 17 16:53 authorized_keys??? 確認(rèn)權(quán)限為400
?
?
?
配置結(jié)束。
測(cè)試:從A機(jī)器上,在aaa用戶下,使用bbb帳號(hào)登錄B機(jī)器。
?
?
[aaa@A ~]$ ssh -l bbb xxx.xxx.xxx.xxx
Enter passphrase for key '/home/aaa/.ssh/id_rsa': ????? 會(huì)提示輸入私鑰保護(hù)密碼(在創(chuàng)建密鑰對(duì)時(shí)輸?shù)拿艽a,輸入正確后進(jìn)入系統(tǒng))
[bbb@B ~]$
?
??
安全的關(guān)鍵點(diǎn)在于如何安全地將id_rsa.pub的內(nèi)容傳遞到服務(wù)端
?
?
測(cè)試完畢,清理系統(tǒng)(刪除測(cè)試用戶帳號(hào)及其家目錄)
?
?
A機(jī)器上,exit到root下
?
[root@A ~]# userdel -r aaa
?
B機(jī)器上,exit到root下
?
[root@B ~]# userdel -r bbb
?
?
http://daren.blog.51cto.com/2974225/882486
http://heikezhi.com/2011/08/26/ssh-productivity-tips/
總結(jié)
以上是生活随笔為你收集整理的通过key登录ssh的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring事务TransactionP
- 下一篇: Tortoise SVN使用方法,简易图