在執行計划任務拷貝文件的時候,用scp命令需要輸入密碼,這里用公共密鑰的方式實現密碼的自動輸入。
具體操作:
要求:把192.168.0.2機上的test.tar拷貝到192.168.0.3機器的上
192.168.0.2服務器上:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
在192.168.0.3建立好.ssh目錄后,從192.168.0.2拷貝~/.ssh/id_rsa.pub到192.168.0.3中~/.ssh目錄下(scp ~/.ssh/id_rsa.pub root@192.168.0.3:~/.ssh)。
192.168.0.3服務器上:
mkdir -p ~/.ssh
把從192.168.0.2拷貝過來的id_rsa.pub重命名為authorized_keys(cp id_rsa.pub authorized_keys)
chmod 600 ~/.ssh/authorized_keys
此時拷貝就不需要輸入密碼:scp test.tar root@192.168.0.3:/var/www
下面就可以把此命令放到計划任務中而自動執行了
A為本地主機(即用於控制其他主機的機器) ;
B為遠程主機(即被控制的機器Server), 假如ip為192.168.60.110;
A和B的系統都是Linux
在A上運行命令:
# ssh-keygen -t rsa (連續三次回車,即在本地生成了公鑰和私鑰,不設置密碼)
# ssh root@192.168.60.110 "mkdir .ssh; chmod 0700 .ssh" (需要輸入密碼)
# scp ~/.ssh/id_rsa.pub root@192.168.60.110:.ssh/id_rsa.pub (需要輸入密碼)
在B上的命令:
# touch /root/.ssh/authorized_keys2 (如果已經存在這個文件, 跳過這條)
# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys2 (將id_rsa.pub的內容追加到 authorized_keys2 中)
回到A機器:
# ssh root@192.168.60.110 (不需要密碼, 登錄成功)
如果能保護好自己的私鑰, 這種方法相對在shell上輸入密碼, 要安全一些
##############################################
深入一點點:
從表面上簡單的理解一下登錄的過程,
首先 ssh-keygen -t rsa 命令生成了一個密鑰和一個公鑰, 而且密鑰可以設置自己的密碼,可以把密鑰理解成一把鑰匙, 公鑰理解成這把鑰匙對應的鎖頭,把鎖頭(公鑰)放到想要控制的server上, 鎖住server, 只有擁有鑰匙(密鑰)的人, 才能打開鎖頭, 進入server並控制,而對於擁有這把鑰匙的人, 必需得知道鑰匙本身的密碼,才能使用這把鑰匙 (除非這把鑰匙沒設置密碼), 這樣就可以防止鑰匙被人配了(私鑰被人復制)
當然, 這種例子只是方便理解罷了,
擁有root密碼的人當然是不會被鎖住的, 而且不一定只有一把鎖(公鑰), 但如果任何一把鎖, 被人用其對應的鑰匙(私鑰)打開了, server就可以被那個人控制了
所以說, 只要你曾經知道server的root密碼, 並將有root身份的公鑰放到上面, 就可以用這個公鑰對應的私鑰"打開" server, 再以root的身分登錄, 即使現在root密碼已經更改!
如果想控制n個機器, 那就需要n對鑰匙(密鑰和公鑰), ssh-keygen 命令可以隨意更改鑰匙對的名字, 比如:
[root@wwy .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa_192.168.102.12
......
這樣私鑰和公鑰的名字分別就是:
id_rsa_192.168.102.12 和 id_rsa_192.168.102.12.pub
然后將 id_rsa_192.168.102.12.pub 文件的內容, 追加到sever的 ~/.ssh/authorized_keys2 文件中,
最后, 在本地用ssh命令的 -i 參數指定本地密鑰, 並登錄:
# ssh -i /root/.ssh/id_rsa_192.168.102.12 192.168.102.12
如果密鑰設置了密碼, 就用密鑰的密碼登錄, 沒設密碼, 就直接登錄進去了
scp也是一樣的
如:
scp -i /root/.ssh/id_rsa./xxx 192.168.102.158:/home/wwy/bak