请简述SSH秘钥对登录过程和NFS如何使用?

请简述SSH秘钥对登录过程和NFS如何使用?,第1张

步骤一:使用ssh-keygen -t rsa 命令创建秘钥对,分别为:id_rsa(私钥文件)和id_rsapub(公钥文件),密钥对保存在(/root/ssh/)中,可以使用(cd ssh/ , ll )查看;
步骤二:执行scp id_rsapub root@192168443:/root (根据自己的主机地址写,这里的ip地址为SSH服务器的IP)命令,将公钥上传到服务端的/root/目录下;
步骤三:把公钥放到某一个用户的authorized_keys中,放到哪个用户下就可以让哪个用户登录。本例中放在root用户下,如果root用户下没有ssh目录,就创建一个。具体指令如下:
mkdir ssh //创建目录
cat id_rsapub //读一下公钥内容
cat id_rsapub 》 sh/authorized_keys //把公钥文件内容追加到authorized_keys中
这样做的目的有利于多个客户端登录,如果单纯把id_rsapub改名为authorized_keys放到ssh中,就只能允许一个客户端登录(服务器一般都是多用户进行管理);到这里基本上SSH密钥对登录就配置完成了,但是为了安全起见,一般还要进行一下的配置
步骤四:由于Linux中有一个强制安全的增强组件SELinux服务,而root创建的authorized_keys的权限默认为644(rw_r__r__),SELinux会认为它不安全强制用户把权限修改为600(rw_______)。
步骤五:SELinux对Linux系统影响太大,对于初学者不太适合,所以可以把它关掉。具体方法如下:
vi /etc/selinux/config //进入selinux的配置文件,把默认的‘SELinux=enforcing’ 修改为‘SELinux=disabled’,然后重启Linux系统。
步骤六:修改服务器端SSH配置文件:
vi /etc/ssh/sshd_config
RSAAuthentication yes 把这行前面的注释号(‘#’)去掉,表示打开RSA验证
PubkeyAuthentication yes 同样把这行的注释号去掉,表示公钥验证打开。
Authorizedkeysfile ssh/authorized_keys 去掉注释号,允许使用公钥验证文件的保存位置。
passwordAuthentication no(默认为yes) 进制使用密码验证登录(可选)
service sshd restart // 重启ssh服务

首先需要下载、并安装 SSH 客户端软件,然后在 IP 地址栏中输入 SSH 服务器的 IP 地址,端口号输入系统管理员指定的端口号(若没有特殊指定的话,缺省的端口号为:22),然后再输入密码,即可以登录 SSH 服务器。

默认配置
Windows下有很多SSH工具。在这里我是用的是Putty。如果安装了Git并配置使用Putty的话,就不需要另外在安装Putty了。使用SSH连接服务器的命令如下:
ssh
IP地址1
一般来说为了安全性考虑,端口号等一些参数并不会使用默认值。这样的话命令就变成这样:
ssh
用户名@IP地址
-p
端口号1
如果连接成功的话会提示你输入远程服务器的密码。全部成功之后SSH就会显示远程服务器的提示符,这时候就说明连接成功了。
密钥登录
每次登录SH都需要输入密码很麻烦,而且可能不太安全。SSH还能使用另外一种登录方式,也就是使用密钥登录。这种登录方式需要客户端生成一堆公钥私钥对,然后将公钥添加到服务器中,这样下次就可以直接登录了。
首先生成SSH密钥,依照提示输入信息即可。默认生成在用户主目录中的ssh文件夹中。带pub的是公钥,接下来需要添加到服务器中。
ssh-keygen1
然后将本地公钥添加到服务器中,需要使用另一个命令:
scp
-P
端口号
本地文件路径
用户名@远程服务器地址:远程路径1
然后登陆服务器,找到复制进去的公钥,将公钥名字改为authorized_keys并添加到对应的ssh文件夹中。然后退出SSH重新登陆试试,成功的话不需要输入密码就会直接进入远程服务器。

1 制作密钥对
首先在服务器上制作密钥对。首先用密码登录到你打算使用密钥登录的账户,然后执行以下命令:
[root@host ~]$ ssh-keygen <== 建立密钥对
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_rsapub <== 公钥
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host
密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。
现在,在 root 用户的家目录中生成了一个 ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsapub 为公钥。
2 在服务器上安装公钥
键入以下命令,在服务器上安装公钥:
[root@host ~]$ cd ssh
[root@host ssh]$ cat id_rsapub >> authorized_keys
如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:
[root@host ssh]$ chmod 600 authorized_keys
[root@host ssh]$ chmod 700 ~/ssh
3 设置 SSH,打开密钥登录功能
编辑 /etc/ssh/sshd_config 文件,进行如下设置:
RSAAuthentication yes
PubkeyAuthentication yes
另外,请留意 root 用户能否通过 SSH 登录:
PermitRootLogin yes
当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:
PasswordAuthentication no
最后,重启 SSH 服务:
[root@host ssh]$ service sshd restart
4 将私钥下载到客户端,然后转换为 PuTTY 能使用的格式
使用 WinSCP、SFTP 等工具将私钥文件 id_rsa 下载到客户端机器上。然后打开 PuTTYGen,单击 Actions 中的 Load 按钮,载入你刚才下载到的私钥文件。如果你刚才设置了密钥锁码,这时则需要输入。
载入成功后,PuTTYGen 会显示密钥相关的信息。在 Key comment 中键入对密钥的说明信息,然后单击 Save private key 按钮即可将私钥文件存放为 PuTTY 能使用的格式。
今后,当你使用 PuTTY 登录时,可以在左侧的 Connection -> SSH -> Auth 中的 Private key file for authentication: 处选择你的私钥文件,然后即可登录了,过程中只需输入密钥锁码即可。

我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。其实,有一个更好的办法来保证安全,而且让你可以放心地用 root 账户从远程登录——那就是通过密钥方式登录。
密钥形式登录的原理是:利用密钥生成器制作一对密钥——一只公钥和一只私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也可以登录。
下面来讲解如何在 Linux 服务器上制作密钥对,将公钥添加给账户,设置 SSH,最后通过客户端登录。
1 制作密钥对
首先在服务器上制作密钥对。首先用密码登录到你打算使用密钥登录的账户,然后执行以下命令:
[root@host ~]$ ssh-keygen <== 建立密钥对
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_rsapub <== 公钥
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host
密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。
现在,在 root 用户的家目录中生成了一个 ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsapub 为公钥。
2 在服务器上安装公钥
键入以下命令,在服务器上安装公钥:
[root@host ~]$ cd ssh
[root@host ssh]$ cat id_rsapub >> authorized_keys
如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:
[root@host ssh]$ chmod 600 authorized_keys
[root@host ssh]$ chmod 700 ~/ssh
3 设置 SSH,打开密钥登录功能
编辑 /etc/ssh/sshd_config 文件,进行如下设置:
RSAAuthentication yes
PubkeyAuthentication yes
另外,请留意 root 用户能否通过 SSH 登录:
PermitRootLogin yes
当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:
PasswordAuthentication no
最后,重启 SSH 服务:
[root@host ssh]$ service sshd restart
4 将私钥下载到客户端,然后转换为 PuTTY 能使用的格式
使用 WinSCP、SFTP 等工具将私钥文件 id_rsa 下载到客户端机器上。然后打开 PuTTYGen,单击 Actions 中的 Load 按钮,载入你刚才下载到的私钥文件。如果你刚才设置了密钥锁码,这时则需要输入。
载入成功后,PuTTYGen 会显示密钥相关的信息。在 Key comment 中键入对密钥的说明信息,然后单击 Save private key 按钮即可将私钥文件存放为 PuTTY 能使用的格式。
今后,当你使用 PuTTY 登录时,可以在左侧的 Connection -> SSH -> Auth 中的 Private key file for authentication: 处选择你的私钥文件,然后即可登录了,过程中只需输入密钥锁码即可。

1、公私钥简介与原理

公钥和私钥都属于非对称加密算法的一个实现,这个加密算法的信息交换过程是:

非对称加密算法不能使用相同的密钥进行解密,也就是说公钥加密的只能使用私钥进行解密。

2、使用密钥进行ssh免密登录

ssh使用私钥登录大致步骤就是:主机A(客户端)创建公钥私钥,并将公钥复制到主机B(被登陆机)的指定用户下,然后主机A使用保存私钥的用户登录到主机B对应保存公钥的用户。

两台主机:

ssh-keygen -t rsa
-t rsa可以省略,默认就是生成rsa类型的密钥

ssh-copy-id -i ~/ssh/id_rsapub root@192168187142

方法二:自己创建文件进行拷贝

登录流程

密钥登录比密码登录安全,主要是因为他使用了非对称加密,登录过程中需要用到 密钥对 。整个登录流程如下:

远程服务器持有公钥,当有用户进行登录,服务器就会随机生成一串字符串,然后发送给正在进行登录的用户。

用户收到远程服务器发来的字符串,使用与 远程服务器公钥配对的私钥 对字符串进行加密,再发送给远程服务器。

服务器使用公钥对用户发来的加密字符串进行解密,得到的解密字符串如果与第一步中发送给客户端的随机字符串一样,那么判断为登录成功。

整个登录的流程就是这么简单,但是在实际使用 ssh 登录中还会碰到一些小细节,这里演示一遍 ssh 远程登录来展示下这些细节问题。

生成密钥对

使用ssh-keygen就可以直接生成登录需要的密钥对。ssh-keygen是 Linux 下的命令,不添加任何参数就可以生成密钥对。

➜  ~ ssh-keygenGenerating public/private rsa key pairEnter fileinwhichto save the key (/home/jaychen/ssh/id_rsa):#1Enter passphrase (emptyforno passphrase):#2Enter same passphrase again:#3

执行ssh-keygen会出现如上的提示,在#1处这里提示用户输入生成的私钥的名称,如果不填,默认私钥保存在/home/jaychen/ssh/id_rsa文件中。这里要注意两点:

生成的密钥,会放在 执行ssh-keygen命令的用户的家目录 下的ssh文件夹中。即$HOME/ssh/目录下。

生成的公钥的文件名,通常是私钥的文件名后面加pub的后缀。

#2处,提示输入密码,注意这里的密码是用来保证私钥的安全的。如果填写了密码,那么在使用密钥进行登录的时候,会让你输入密码,这样子保证了如果私钥丢失了不至于被恶意使用。 话是这么说,但是平时使用这里我都是直接略过。

#3是重复#2输入的密码,这里就不废话了。

生成密钥之后,就可以在/home/jaychen/ssh/下看到两个文件了(我这里会放在/home/jaychen下是因为我使用 jaychen 用户来执行ssh-keygen命令)

➜  ssh ls

total 16K

drwx------ 2 jaychen jaychen 40K 12月  7 17:57

drwx------ 9 jaychen jaychen 40K 12月  7 18:14

-rw------- 1 jaychen jaychen 17K 12月  7 17:57 id_rsagithub

-rw-r--r-- 1 jaychen jaychen 390 12月  7 17:57 id_rsagithubpub

生成的私钥还要注意一点: 私钥的权限应该为rw-------,如果私钥的权限过大,那么私钥任何人都可以读写就会变得不安全。ssh 登录就会失败。

首次 ssh 登录

登录远程服务器的命令是

ssh 登录用户@服务器ip

这里开始要注意两个用户的概念:

本地执行这条命令的用户,即当前登录用户,我这里演示的用户名称是 jaychen。

要登录到远程服务器的用户。

在开始登录之前,我们要首先要把生成 公钥 上传到服务器。

公钥的内容要保存到 要登录的用户的家目录下的ssh/authorized_keys 文件中。假设你之后要使用 root 用户登录远程服务器,那么公钥的内容应该是保存在/root/ssh/authorized_keys中。注意authorized_keys文件是可以保存多个公钥信息的,每个公钥以换行分开。

上传完毕之后,执行

ssh root@远程服务器ip

这个时候,如上面说的,远程服务器会发送一段随机字符串回来,这个时候需要使用私钥对字符串进行加密。而这个私钥会去 执行该命令的用户的家目录下的ssh目录 读取私钥文件,默认私钥文件为id_rsa文件。即$HOME/ssh/id_rsa文件。假设在生成密钥的时候对私钥进行了加密,那么这个时候就需要输入密码。

上面的流程用户登录的时候是不会感知的,ssh 在背后完成了所有的校验 *** 作,如果密钥匹配的话,那么用户就可以直接登录到远程服务器,但是如果是 首次登录 的话,会出现类似下面的提示:

➜  ssh ssh root@19216811The authenticityofhost'19216811 (19216811)' can't be establishedECDSAkeyfingerprintisSHA256:61U/SJ4n/QdR7oKT2gaHNuGxhx98saqMfzJnzA1XFZgAre you sure you wanttocontinueconnecting (yes/no)

这句话的意思是,远程服务器的真实身份无法校验,只知道公钥指纹(公钥的 MD5 值)为61U/SJ4n/QdR7oKT2gaHNuGxhx98saqMfzJnzA1XFZg,是否真的要建立连接。出现上面的提示是因为避免存在 中间人攻击 。

中间人攻击

中间人攻击的前提是,你第一次登录一台远程服务器,你除了用户名、用户名对应的公钥私钥以及服务器 ip 之外,对远程服务器丝毫不了解的情况下。假设你 ssh 远程登录 19216811 的远程主机,在连接过程中被第三者拦截,第三者假冒自己为 19216811 的主机,那么你就会直接连接到其他人的服务器上。这就是中间人攻击。

为了避免中间人攻击,ssh 在首次登录的时候会返回公钥指纹,用户需要自己手动去 比对你要登录的远程服务器的公钥的公钥指纹和 ssh 返回的公钥指纹是否一样 。

经过比较公钥指纹,确认该服务器就是你要登录的服务器,输入yes之后就可以成功登录。整个登录流程结束。

known_hosts 文件

第一次登录之后,在本机的$HOME/ssh/目录下就会生成一个known_hosts的文件,内容类似下面

➜  ssh cat known_hosts19216811ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOPKYWolOYTDevvBR6GV0rFcI0z/DHZizN5l/ajApsgx+UcOOh51liuyBRRCIyF+BR56Le0lP0Pn6nzvLjbqMqg=

这个文件记录了远程主机 ip 和远程主机对应的公钥指纹,那么在下次登录的时候,远程主机发送过来的公钥指纹,直接和known_hosts文件中对应 ip 的公钥指纹比较即可。

config 配置

很多时候,我们开发可能需要连接多台远程服务器,并且需要配置 git 服务器的私钥。那么这么多的服务器不能共用一套私钥,不同的服务器应该使用不同的私钥。但是我们从上面的连接流程可以看到,ssh 默认是去读取$HOME/ssh/id_rsa文件作为私钥登录的。如果想要不同的服务器使用不同的私钥进行登录,那么需要在ssh目录下编写config文件来进行配置。

config的配置很简单,只要指明哪个用户登录哪台远程服务器需要使用哪个私钥即可。下面给出一个配置示例。

Host githubcom

           User jaychen

            IdentityFile ~/ssh/id_rsagithub

Host 19216811

             User ubuntu

IdentityFile ~/ssh/id_rsaxxx

上面config文件字段含义如下:

Host 指明了远程主机的 ip,除了使用 ip 地址,也可以直接使用网址。

User 指的是登录远程主机的用户。

IdentityFile 指明使用哪个私钥文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10435124.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-08
下一篇 2023-05-08

发表评论

登录后才能评论

评论列表(0条)

保存