SSH学习笔记

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总用量 28drwx------ 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

相关推荐

来自星星的你李载京(来自星星的你李载京为什么把妻子送进精神病院)
日式炸猪排,有何不一样?
365bet欧洲

日式炸猪排,有何不一样?

07-10 👁️ 7918
厦门大学刘刚教授团队:钙基纳米材料与癌症—从诊断到治疗