在实现免密登录之前我先介绍关于ssh的几个命令,然后就开始今天的主题。
命令
ssh
ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。
选项
对象 | 说明 |
---|---|
-1 | 强制使用ssh协议版本1; |
-2 | 强制使用ssh协议版本2; |
-4 | 强制使用IPv4地址; |
-6 | 强制使用IPv6地址; |
-A | 开启认证代理连接转发功能; |
-a | 关闭认证代理连接转发功能; |
-b | 使用本机指定地址作为对应连接的源ip地址; |
-C | 请求压缩所有数据; |
-F | 指定ssh指令的配置文件; |
-f | 后台执行ssh指令; |
-g | 允许远程主机连接主机的转发端口; |
-i | 指定身份文件; |
-l | 指定连接远程服务器登录用户名; |
-N | 不执行远程指令; |
-o | 指定配置选项; |
-p | 指定远程服务器上的端口; |
-q | 静默模式; |
-X | 开启X11转发功能; |
-x | 关闭X11转发功能; |
-y | 开启信任X11转发功能。 |
ssh-keygen
ssh-keygen命令用于为“ssh”生成、管理和转换认证密钥,它支持RSA和DSA两种认证密钥。
选项
对象 | 说明 |
---|---|
-b | 指定密钥长度; |
-e | 读取openssh的私钥或者公钥文件; |
-C | 添加注释; |
-f | 指定用来保存密钥的文件名; |
-i | 读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥; |
-l | 显示公钥文件的指纹数据; |
-N | 提供一个新密语; |
-P | 提供(旧)密语; |
-q | 静默模式; |
-t | 指定要创建的密钥类型。 |
ssh-copy-id
ssh-copy-id命令可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh
, 和~/.ssh/authorized_keys
设置合适的权限。
语法
ssh-copy-id [-i [identity_file]] [user@]machine
#-i:指定公钥文件
实例
1、把本地的ssh公钥文件安装到远程主机对应的账户下:
ssh-copy-id user@server
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
scp
scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。
选项
对象 | 说明 |
---|---|
-1 | 使用ssh协议版本1; |
-2 | 使用ssh协议版本2; |
-4 | 使用ipv4; |
-6 | 使用ipv6; |
-B | 以批处理模式运行; |
-C | 使用压缩; |
-F | 指定ssh配置文件; |
-l | 指定宽带限制; |
-o | 指定使用的ssh选项; |
-P | 指定远程主机的端口号; |
-p | 保留文件的最后修改时间,最后访问时间和权限模式; |
-q | 不显示复制进度; |
-r | 以递归方式复制。 |
实例
从远处复制文件到本地目录
scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
从10.10.10.10机器上的/opt/soft/
的目录中下载nginx-0.5.38.tar.gz 文件到本地/opt/soft/
目录中。
从远处复制到本地
scp -r root@10.10.10.10:/opt/soft/mongodb /opt/soft/
从10.10.10.10机器上的/opt/soft/
中下载mongodb目录到本地的/opt/soft/
目录来。
上传本地文件到远程机器指定目录
scp /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest
复制本地/opt/soft/
目录下的文件nginx-0.5.38.tar.gz到远程机器10.10.10.10的opt/soft/scptest
目录。
上传本地目录到远程机器指定目录
scp -r /opt/soft/mongodb root@10.10.10.10:/opt/soft/scptest
上传本地目录/opt/soft/mongodb
到远程机器10.10.10.10上/opt/soft/scptest
的目录中去。
实现ssh登录的步骤
生成公钥和私钥
[root@ylg ~]$ ssh-keygen <== 建立密钥对 ssh-keygen等同于ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again: <== 再输入一遍密钥锁码
Your identification has been saved in /root/.ssh/id_rsa. <== 私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公钥
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@ylg
运行上面的命令后,系统会出现一系列提示,可以一路回车.
特别说明,要不要对私钥设置口令(passphrase),如果担心私钥的安全,可以设置一个。没有特殊需求直接Enter,为空
运行结束以后, 默认在 ~/.ssh
目录生成两个文件:
- id_rsa :私钥
- id_rsa.pub :公钥
在服务器上安装公钥
将公钥复制到要登录的服务器上,并添加到认证文件(.ssh/authorzied_keys
)中。
- 复制服务器上
scp {-P port} ~/.ssh/id_rsa.pub 远端服务器用户名@host:目录
scp -P 22 ~/.ssh/id_rsa.pub yang@192.168.82.134:~/
- 在服务器上安装公钥
[root@ylg ~]$ cd .ssh
[root@host .ssh]$ cat id_rsa.pub >> authorized_keys
或者直接使用ssh-copy-id命令直接将公钥文件传输的远程机器,并生效
ssh-copy-id -i ~/.ssh/id_rsa.pub yang@192.168.82.134
- 修改权限
如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:
[root@yang .ssh]$ chmod 600 authorized_keys
[root@yang .ssh]$ chmod 700 ~/.ssh
要登录的服务器ssh目录的权限为700,其下文件authorized_keys和私钥的权限为600。这是linux的安全要求,如果权限不对,自动登录将不会生效。
- 这样做完之后我们就可以免密码登录了
ssh yang@192.168.82.134
- 重启服务器的ssh服务的命令
#RHEL/CentOS系统
$ service sshd restart
#ubuntu系统
$ service ssh restart
#debian系统
$ /etc/init.d/ssh restart