SSH学习笔记
一、SSH相关概念
1、ssh概念
SSH(全称 Secure Shell)是一种加密的网络协议。使用该协议的数据将被加密,如果在传输中间数据泄漏,也可以确保没有人能读取出有用信息。要使用 SSH,目标机器应该安装 SSH 服务端应用程序,因为 SSH 是基于客户-服务模式的。 当你想安全的远程连接到主机,可中间的网络(比如因特网)并不安全,通常这种情况下就会使用 SSH。
2、SSH密钥
SSH密钥是一种无须密码登录Linux实例的认证方式。
通过加密方法生成一对SSH密钥,一个对外公开密钥,成为公钥,一个由您保密保存,称为私钥。 将公钥存放于您的Linux实例中,私钥存放在本地机器中,即可使用SSH命令进行远程连接。
SSH密钥的优势
-
SSH密钥的安全强度远高于用户使用密码。
-
只需配置SSH私钥,即可远程连接,无需重复输入密码。
受支持的密钥格式:
Azure 目前支持最小长度为 2048 位的 SSH 协议 2 (SSH-2) RSA 公钥-私钥对。 不支持其他密钥格式(如 ED25519 和 ECDSA)。
3、在linux安装SSH
安装 ssh-client $ sudo apt-get install openssh-client 安装 ssh-server $ sudo apt-get install openssh-server
二、创建SSH密钥
1、使用ssh-keygen生成密钥
SSH 密钥默认保留在 ~/.ssh
目录中。 如果没有 ~/.ssh
目录,ssh-keygen
命令会使用正确的权限创建一个。 SSH 密钥创建为资源,并存储在 Azure 中供以后使用。
以下示例显示可用于创建 SSH RSA 密钥对的其他命令选项。 如果当前位置存在 SSH 密钥对,这些文件将被覆盖。
ssh-keygen \ -m PEM \ -t rsa \ -b 4096 \ -C "azureuser@myserver" \ -f ~/.ssh/mykeys/myprivatekey \ -N mypassphrase
命令解释
ssh-keygen
= 用于创建密钥的程序
-m PEM
= 将密钥的格式设为 PEM
-t rsa
= 要创建的密钥类型,本例中为 RSA 格式
-b 4096
= 密钥的位数,本例中为 4096
-C "azureuser@myserver"
= 追加到公钥文件末尾以便于识别的注释。 通常以电子邮件地址用作注释,但也可以使用任何最适合你基础结构的事物。
-f ~/.ssh/mykeys/myprivatekey
= 私钥文件的文件名(如果选择不使用默认名称)。 追加了 .pub
的相应公钥文件在相同目录中生成。 该目录必须存在。
-N mypassphrase
= 用于访问私钥文件的其他密码。
zll@zll-device:~$ ssh-keygen -m PEM -t rsa -b 4096 -C "zhongll2019@myserver" Generating public/private rsa key pair. Enter file in which to save the key (/home/zll/.ssh/id_rsa): /home/zll/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/zll/.ssh/id_rsa Your public key has been saved in /home/zll/.ssh/id_rsa.pub The key fingerprint is: SHA256:f1Nbw5NqalZovbw4pWW72JnLcIJWAvbjRzL5tmUTWKk zhongll2019@myserver The key's randomart image is: +---[RSA 4096]----+ | | | . | | o o | | . o . + . .| | SB Eo..=.| | ..Xo Booo| | +o*XB+ | | . o*#=+ | | o=.O+ | +----[SHA256]-----+
执行完上述命令后会在当前目录生成隐藏目录.ssh。用ls -l(简写为ll)命令查看,发现里面生成了两个新文件:id_rsa是私钥,id_rsa.pub是公钥。
~/.ssh
目录列表
若要查看 ~/.ssh
目录中的现有文件,请运行以下命令。 如果在目录中找不到文件或目录本身丢失,请确保所有以前的命令都已成功运行。 可能需要根访问权限,才能在某些 Linux 发行版上修改此目录中的文件。
zll@zll-device:~$ ls -al ~/.ssh
总用量 28
drwx------ 2 zll zll 4096 9月 3 15:13 .
drwxr-xr-x 70 zll zll 4096 10月 5 18:04 ..
-rw------- 1 zll zll 411 9月 3 14:44 id_ed25519
-rw-r--r-- 1 zll zll 96 9月 3 14:44 id_ed25519.pub
-rw------- 1 zll zll 3243 10月 6 11:27 id_rsa
-rw-r--r-- 1 zll zll 746 10月 6 11:27 id_rsa.pub
-rw-r--r-- 1 zll zll 1772 10月 6 11:12 known_hosts
密钥密码
Enter passphrase (empty for no passphrase):
强烈建议为私钥添加密码。 如果不使用密码来保护密钥文件,任何人只要拥有该文件,就可以用它登录到拥有相应公钥的任何服务器。 添加密码可提升防护能力以防有人能够访问私钥文件,可让用户有时间更改密钥。
三、复制SSH公钥到远程主机
ssh-copy-id命令来自于英文词组“ssh copy id”,中文译为“复制SSH信息”,其功能是用于将本地生成的SSH公钥信息复制到远程主机。通常情况下,运维人员会先使用ssh-keygen命令生成出SSH密钥对文件,随后使用ssh-copy-id命令将公钥文件复制到远程主机上,这样操作后再进行远程SSH访问时将无需进行账号密码的口令验证,而是通过密钥方式登录。
语法格式:ssh-copy-id [参数] 远程主机ip地址
[root@linuxcool ~]# ssh-copy-id 192.168.10.10 The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established. ECDSA key fingerprint is SHA256:212/FhZ+6JFs5psuMJx9+5alyW6QDzviE0miulDPiKk. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.10.10's password: 此处输入远程主机管理员密码 Number of key(s) added: 1 Now try logging into the machine, with: "ssh '192.168.10.10'" and check to make sure that only the key(s) you wanted were added.
执行完上述命令之后,在server端可以看到用户目录/.ssh目录下生成了authorized_keys文件。
四、
1、无密钥方式
使用 IP 地址:
$ ssh 192.168.225.22
或使用端口号、用户名和 IP 地址:
$ ssh -p 22 sk@192.168.225.22
或使用端口号、用户名和主机名:
$ ssh -p 22 sk@server.example.com
生成秘钥对(client端) ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 将Client端的公钥添加到用于认证的Server端的公钥文件中 ssh-copy-id user@ip_address 在server端禁用通过密码登陆SSH的方式 sudo vim /etc/ssh/sshd_config (打开文件后,去掉下语句的注释(允许使用密钥自动登录): AuthorizedKeyFile %h/.ssh/authored_keys ) 重启ssh服务: sudo service ssh restart 在客户端重新使用ssh登录,发现不再需要输入密码就直接登入了。 ssh 用户名@主机IP
五、修改SSH设置与别名
$ vi ~/.ssh/config 添加所有远程主机的详细信息,如下所示: Host webserver HostName 192.168.225.22 User sk Host dns HostName server.example.com User root Host dhcp HostName 192.168.225.25 User ostechnix Port 2233
将 Host、Hostname、User 和 Port 配置的值替换为你自己的值。添加所有远程主机的详细信息后,保存并退出该文件。
现在你可以使用以下命令通过 SSH 进入系统:
$ ssh webserver $ ssh dns $ ssh dhcp
2、 使用 Bash 别名
这是创建 SSH 别名的一种应急变通的方法,可以加快通信的速度。你可以使用 alias 命令使这项任务更容易。
打开 ~/.bashrc 或者 ~/.bash_profile 文件:
alias webserver='ssh sk@server.example.com'
alias dns='ssh sk@server.example.com'
alias dhcp='ssh sk@server.example.com -p 2233'
alias ubuntu='ssh sk@server.example.com -i ~/.ssh/id_rsa_remotesystem'
再次确保你已使用自己的值替换主机、主机名、端口号和 IP 地址。保存文件并退出。
更改:
$ source ~/.bashrc 或者 $ source ~/.bash_profile 在此方法中,你甚至不需要使用 ssh 别名 命令。相反,只需使用别名,如下所示。 $ webserver $ dns $ dhcp $ ubuntu
参考博客: https://learn.microsoft.com/zh-cn/azure/virtual-machines/linux/create-ssh-keys-detailed
https://www.cnblogs.com/helloIT/p/6221107.html
https://www.yisu.com/zixun/672912.html