SSH & 免密码登入
最基本的用法
SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。
- $ ssh user@host
如果本地用户名与远程用户名一致,登录时可以省略用户名。
- $ ssh host
SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
- $ ssh -p 2222 user@host
上面这条命令表示,ssh直接连接远程主机的2222端口。
公钥登录(免密码)1
这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:
- $ ssh-keygen
运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。
运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
这时再输入下面的命令,将公钥传送到远程主机host上面:
- $ ssh-copy-id user@host (仿照第三条吧,可能有错)
或者- $ ssh user@host ‘mkdir -p .ssh && cat >> .ssh/authorized_keys’ < ~/.ssh/id_rsa.pub
登入到root- ssh-copy-id -i id_rsa.pub root@192.168.56.101
好了,从此你再登录,就不需要输入密码了。
如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面”#”注释是否取掉。
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
然后,重启远程主机的ssh服务。
// ubuntu系统
- service ssh restart
// debian系统- /etc/init.d/ssh restart
authorized_keys文件
远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。
这里不使用上面的ssh-copy-id命令,改用下面的命令,解释公钥的保存过程:
- $ ssh user@host ‘mkdir -p .ssh && cat >> .ssh/authorized_keys’ < ~/.ssh/id_rsa.pub
这条命令由多个语句组成,依次分解开来看:
1. "$ ssh user@host",表示登录远程主机;
2.单引号中的mkdir .ssh && cat >> .ssh/authorized_keys,表示登录后在远程shell上执行的命令
3."$ mkdir -p .ssh"的作用是,如果用户主目录中的.ssh目录不存在,就创建一个;
4.'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub的作用是,将本地的公钥文件~/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾。
写入authorized_keys文件后,公钥登录的设置就完成了。
公钥登录(免密码)2
使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linux主机。
ssh-keygen 创建公钥和密钥。
ssh-copy-id 把本地主机的公钥复制到远程主机的authorized_keys文件上。
ssh-copy-id 也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限 。
步骤1: 用 ssh-key-gen 在本地主机上创建公钥和密钥
- ligh@local-host$ ssh-keygen -t rsa
Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):[Enter key]
Enter passphrase (empty for no passphrase): [Press enter key]
Enter same passphrase again: [Pess enter key]
Your identification has been saved in /home/jsmith/.ssh/id_rsa.
Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub.
The key fingerprint is: 33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9
ligh@local-host
步骤2: 用 ssh-copy-id 把公钥复制到远程主机上
- ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3
ligh@remote-host‘s password:
Now try logging into the machine, with ―ssh ?remote-host‘‖, and check in:
.ssh/authorized_keys to make sure we haven‘t added extra keys that you weren‘t expecting.
[注: ssh-copy-id 把公钥分发即追加到远程主机的 .ssh/authorized_key 上.]
步骤3: 直接登录远程主机
- ligh@local-host sshremote−hostLastlogin:SunNov1617:22:332008from192.168.1.2[注:SSH不会询问密码.]ligh@remote−host
[注: 你现在已经登录到了远程主机上]
SSH Key 无密码登录(原)
A为本地主机(即用于控制其他主机的机器),B为远程主机(即被控制的机器Server), 假如ip为192.168.56.101,A和B的系统都是Linux
在A上的命令:
- ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码)
- ssh root@192.168.56.101 “mkdir .ssh;chmod 0700 .ssh” (需要输入服务器root密码, 注:必须将.ssh的权限设为700)
- scp ~/.ssh/id_rsa.pub root@192.168.56.101:.ssh/id_rsa.pub (需要输入服务器root密码)
在B上的命令:
- touch /root/.ssh/authorized_keys (如果已经存在这个文件, 跳过这条)
- chmod 600 ~/.ssh/authorized_keys (# 注意: 必须将~/.ssh/authorized_keys的权限改为600, 该文件用于保存ssh客户端生成的公钥,可以修改服务器的ssh服务端配置文件/etc/ssh/sshd_config来指定其他文件名)
- cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys (将id_rsa.pub的内容追加到 authorized_keys 中, 注意不要用 > ,否则会清空原有的内容,使其他人无法使用原有的密钥登录)
也可以不用root用户,换个用户名