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文件。

 

四、使用 SSH 命令连接远程计算机

1、无密钥方式

使用 IP 地址:

$ ssh 192.168.225.22

或使用端口号、用户名和 IP 地址:

$ ssh -p 22 sk@192.168.225.22

或使用端口号、用户名和主机名:

$ ssh -p 22 sk@server.example.com
 
2、有密钥方式
生成秘钥对(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设置与别名
1、使用 SSH 配置文件在 Linux 中创建 SSH 别名
我们可以使用 SSH 默认配置文件来创建 SSH 别名。为此,编辑 ~/.ssh/config 文件(如果此文件不存在,只需创建一个):
$ 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

 

posted @ 2022-12-24 15:10  楸壳  阅读(129)  评论(0编辑  收藏  举报