标签:输出 并保存 加密算法 amp 情况 key pair 说明 用户 ras
ssh可以通过密码和密钥(更加安全)这两种方式建立起客户端与 服务端的连接。
~/authorized_keys
文件,这个文件中包含了所有已经保存的客户端公钥,一个公钥占据一行,这些公钥所对应的客户端可以实现免验证登录。有几种加密算法可以用来生成SSH密钥,例如RSA、DSA、ECDSA,默认情况下使用RSA加密算法。
使用如下命令可以生成一个默认的密钥:
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):
这里可以指定密钥文件的保存位置。默认是~/.ssh/id_rsa
。
点击enter
进入下一步:
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
这里可以指定密钥的密码短语,即在密码之上再加一层密码验证,增强密钥的安全性。
点击enter
进入下一步:
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:
8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here
The key‘s randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
| + |
| o S . |
| o . * + |
| o + = O . |
| + = = + |
| ....Eo+ |
+-----------------+
这时,你的密钥对就算生成成功了。生成的文件如下:
~/.ssh/id_rsa
:存放你的私钥。只能你自己知道。~/.ssh/id_rsa.pub
:存放你的公钥,可以让其他人知道。默认情况下,ssh-keyken使用2048的位长度生成密钥对。这一默认值大多数场合已经足够安全,但是,我们在某些特殊场景下仍然可以使用更大的位长度来增强我们服务器的安全性。
为了做到这一点,我们可以使用-b
参数来指定我们需要的位长度。
比如:
$ ssh-keygen -b 4096
如果你之前已经生成过一个密钥对,那么这里会提示你是否需要覆盖你之前的键:
Overrite(Y/n)?
如果你选择是,那你之前的文件会被覆写,导致你再也无法使用之前的密钥登录到之前的服务器,因此,一定要小心之前的密钥是否需要保留。
如果你已经为你的私钥指定了一个密码短语,该怎么修改或者直接删除这个密码短语呢?
为了修改或移除密码短语,你必须知道原来的密码短语。如果你忘记了原来的密码短语,你将无法再次使用该密钥,必须重新生成新的密钥。
通过下面的命令:
$ ssh-keygen -p
Enter file in which the key is (/root/.ssh/id_rsa):
你可以指定密钥的位置,或者直接按Enter
接受默认的位置。
Enter old passphrase:
输入你希望修改的旧密码,然后你会被提示输入一个新的密码短语:
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
至此,输入你的新密码短语或者按Enter
来移除密码短语。
每个SSH密钥对共享一个密码形式的“手印”,它可以被用来唯一标识密钥对。这在有些情况下会很有用。
为了查看现有的密钥对,你可以执行:
$ ssh-keygen -l
Enter file in which the key is (/root/.ssh/id_rsa):
你可以直接按Enter
选择默认的密钥的位置,或者输入你期望的位置。之后你会得到包含了密钥的位长、手印和帐号以及所选主机和使用的算法的字符串:
4096 8e:c4:82:47:87:c2:26:4b:68:ff:96:1a:39:62:9e:4e demo@test (RSA)
通过将你的公钥复制到服务器,可以让你不用输入密码就可以通过认证,有很多方法可以实现这一点。
如果你当前有一个基于密码的SSH远程服务器访问方式,并且你已经安装了ssh-copy-id工具,那么你就可以很容易的实现这一点。而且ssh-copy-id已经预装到了大多数的linux发行版中。
通过下面的命令可以实现这一点:
$ ssh-copy-id username@remote_host
随后会提示你输入当前用户在远程服务器上的密码,正确输入之后,你本地的公钥就会被添加到服务器用户的~/.ssh/authorized_keys
文件中,之后,你就可以不用输入密码也能登录到远程服务器了。
如果你没有安装ssh-copy-id命令行工具,那你应该怎么样将你的公钥上传到远程服务器呢?通过linux中的管道命令,我们可以实现这一点。
$ cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && ~/.ssh/authorized_keys"
随后根据提示输入远程主机的用户名密码:
The authenticity of host ‘111.111.11.111 (111.111.11.111)‘ can‘t be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
demo@111.111.11.111‘s password:
如果添加成功,你之后的登录将无需再次输入密码,而是简单的通过如下命令:
$ ssh username@remote_ip_host
如果你没有可用的基于密码访问的SSH连接,你将必须手动将你的公钥复制到远程服务器。
打开你的本地终端,输入下面的命令:
$ cat ~/.ssh/id_rsa.pub
将输出到屏幕上的公钥复制到剪贴板,然后通过工具(一般是服务器供应商提供的web面板)连接到远程服务器,并在远程服务器的~/.ssh/
(如果不存在就新建)目录下面创建authorized_keys
文件。最后将你复制的公钥粘贴到该文件中,并保存。
接下来是针对SSH中一些比较常用的命令做个说明。
$ ssh remote_host
这个命令会假设你当前机器的本地用户名和远程服务器上的用户名是一致的。如果不一致,请使用下面的命令。
$ ssh username@remote_host
这个命令会假设你要连接的远程服务器的端口号是22(ssh默认的端口号)。如果不是,请使用-p your_port
指定你的自定义端口号。
如果服务器正常开启了ssh服务以及对应的监听端口,那么你会看到如下信息:
The authenticity of host ‘111.111.11.111 (111.111.11.111)‘ can‘t be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
输入"yes"即可接受来自远程服务器的验证。
如果你使用了密码验证,那么你会被要求输入密码,如果你使用了公钥免登录,且设置了密码短语,那么你将同样被要求输入密码短语,否则,你将自动登录成功。
如果你只是想在远程服务器上执行单个命令,并不想开启一次远程会话。那么你可以通过下面的命令来完成:
$ ssh username@remote_host commander_to_run
这个命令会在连接上远程服务器之后立即执行后面的命令,随后便会关闭连接。
在~/.ssh
目录下新建config
文件(如果不存在的话),并输入如下内容:
Host remote_aliss # 远程主机别名
HostName remote_host #远程主机
Port port_num # 端口号
User your_user # 登录用户
IdentityFile ~/.ssh/id_rsa # 要使用的密钥
配置完成之后,之后的连接只需要通过输入如下命令即可:
$ ssh remote_alias
如果你对密钥使用了密码短语进行加密,那么你在每次建立SSH连接会话之前都会要求输入密码短语,为了简化连接过程,避免每次都要重复输入,你可以使用SSH Agent来保存你的密码短语。
标签:输出 并保存 加密算法 amp 情况 key pair 说明 用户 ras
原文地址:https://www.cnblogs.com/kyle-Programmer/p/14232842.html