生成SSH_key
我觉得在本地机器或者远端机器生成都可以,如果已经存在就可以直接用,这里是本地机器生成。
1
ssh-keygen -t rsa #ssh-keygen -b 4096 -t rsa
这样会在当前目录生成名为id_rsa的私钥文件和名为id_rsa.pub的公钥文件,-t表示密钥类型是rsa。
如果你只输入ssh-keygen生成的RSA密钥长度为2048,如果你对安全性要求比较高可以指定4096位的长度,这里-b就是多少位,当然你对这些参数感兴趣可以使用–help参数看看具体的含义和解释。当你在生成SSHKEY的时候在命令行下会提示你Enter file in which to save the key,让你确认密钥文件保存的路径,
一般回车即可(一般默认会在当前用户家目录下的.ssh目录下)。第二个提示是 Enter passphrase (empty for no passphrase) 让你输入一个密钥的密码,如果不输入则留空;回车生成公私钥完毕 :)
此时你可以使用cat命令看下自己的公私钥。上传公钥到服务器
我们前面在自己的操作系统生成了公私钥,需要上传给服务器
将本地的公钥文件上传到服务器上,然后在服务器需要免密登录的用户家目录下查看是否有 ~/.ssh/authorized_keys 这个文件,
如果没有手动创建一个:1
touch ~/.ssh/authorized_keys
然后我们将公钥内容写入到authorized_keys文件中,因为这个文件可能已经有内容了,所以你可以使用如下方式
1
cat -n ~/.ssh/rsa.pub ~/.ssh/authorized_keys #-n 或 --number:由 1 开始对所有输出的行数编号
这样就将公钥内容追加到authorized_keys中了,然后需要注意配置权限了,否则SSH不会工作的,我在这里踩了坑。。
- 将.ssh目录的权限为700
- 将authorized_keys目录的权限为600
第二种方法 ssh-copy-id 复制公钥到服务器
1
ssh-copy-id -p 8888 username@remote-server # -p 不是默认的22口时需要指定
配置服务器端配置文件
主要是确保
PubkeyAuthentication yes
这行启用这样才会用密钥登陆,其他选项自己看情况1
2
3
4
5
6
7
8
9
10
11
12
13
14
15$ vim /etc/ssh/sshd_config
# 禁用root账户登录,非必要,但为了安全性,请配置
PermitRootLogin no
# 是否让 sshd 去检查用户家目录或相关档案的权限数据,这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。例如使用者的 ~/.ssh/ 权限设错时,某些特殊情况下会不许用户登入
StrictModes no
# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
# 有了证书登录了,就禁用密码登录吧,安全要紧
PasswordAuthentication no配置本地 ssh 文件
1
2
3
4
5
6vim ~/.ssh/config
Host yourserver
HostName 192.168.11.22
Port 12345
User your_username
IdentityFile ~/.ssh/id_rsa #你私钥的位置使用
现在试一下
ssh xx.xx.xx.xx
应该可以不用输入密码了持有多个 ssh-key 时的使用方法
简单情况下,通过手动指定私钥文件登录
1
$ ssh username@hostname -i ~/.ssh/my_id_rsa
在工作中经常需要使用不同的私钥登录不同的服务器,遂需要对不同的私钥进行管理
首先,在新增私钥的时候需要通过不同的文件名来生成不同的私钥文件
1
2ssh-keygen -t rsa -f ~/.ssh/id_rsa.work -C "key for work"
ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "key for github"新增ssh配置文件,并修改权限
1
2touch ~/.ssh/config
chmod 600 ~/.ssh/config编辑配置文件
1
2
3
4
5
6
7
8
9vi ~/.ssh/config
Host *.workdomain.com
HostName *.workdomain.com
IdentityFile ~/.ssh/id_rsa.work
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa.github- Host为别名
- HostName为服务器的域名或IP
- User表示用哪个用户名登录
- IdentityFile表示用哪个私钥进行认证
登录
1
ssh [email protected]
或
1
ssh github.com
首页 | 归档 | 分类 | 标签 | 关于 |
|