Linux07-OpenSSH

目录

一、使用SSH访问远程主机

1.1、什么是OpenSSH Secure Shell(SSH)

1.2、SSH主机密钥

二、配置基于SSH密钥的身份验证

2.1、基于SSH密钥的身份验证

2.2、自定义SSH服务配置

2.3、sftp传输文件


一、使用SSH访问远程主机

1.1、什么是OpenSSH Secure Shell(SSH)

OpenSSH指系统中使用的Secure Shell软件。OpenSSH Secure Shell(以下称ssh)用于在远程系统上安全的运行shell。

我们可以当前身份创建远程交互式shell, ssh  remotehost,然后在结束时用exit命令返回到当前shell。比如我们可以以student的身份从desktop远程登录server。也可以以其他身份登录远程主机, ssh remoteuser@remotehost。

我们先以student身份从desktop登录server,再以root身份从desktop登录server。

[student@desktop0 ~]$ ssh server0
The authenticity of host 'server0 (172.25.0.11)' can't be established.
ECDSA key fingerprint is 65:4d:ac:8a:c9:58:82:b5:0c:91:c4:ef:a5:e6:f6:65.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server0,172.25.0.11' (ECDSA) to the list of known hosts.
student@server0's password:
Last login: Fri Jun 26 10:50:36 2020 from desktop0.example.com
[student@server0 ~]$ exit
logout
Connection to server0 closed.
[student@desktop0 ~]$
[student@desktop0 ~]$ ssh root@server0
root@server0's password:
Last login: Fri Jun 26 10:50:06 2020 from 172.25.0.250
[root@server0 ~]#
[root@server0 ~]# exit
logout
Connection to server0 closed.

1.2、SSH主机密钥

SSH通过公钥加密的方式保障通信安全。当某一ssh客户端连接到ssh服务器时,在该客户端登录之前,服务器会向客户端发送公钥副本。第一次远程登录server时,提示将server0 172.25.0.11加入known host里面。

当用户第一次使用ssh连接到特定服务器时,ssh命令可以在用户的 ~/.ssh/known_hosts 文件中存储该服务器的公钥。在此之后每当用户进行连接时,客户端都会通过对比 ~/.ssh/known_hosts 文件中的服务器条目和服务器发送的公钥,确保从服务器获得相同的公钥。如果公钥不匹配,客户端会假定网络通信遭到劫持或服务器已被入侵,并中断连接。

也就是说,如果服务器的公钥发生更改,用户需要更新起 ~/.ssh/known_hosts 文件并删除旧的条目才能登录。

服务器ID存储在本地客户端的 ~/.ssh/known_hosts 中。

[student@desktop0 ~]$ ll .ssh/known_hosts
-rw-r--r--. 1 student student 181 Jun 26 10:51 .ssh/known_hosts
[student@desktop0 ~]$ cat .ssh/known_hosts
server0,172.25.0.11 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBwmqCDZ/R1sMbPrZgHARIeL+RYPJ0CVt9AJRzJt4cHk4Ky4tmNjRx6FKJjhlcQJMDb+8CZjveJrgmOHxANvSgE=
[student@desktop0 ~]$

服务器主机密钥存储在服务器/etc/ssh/目录下的ssh_host_*key*文件中。非对称加密,私钥没有扩展名,公钥带.pub扩展名。

[root@server0 ~]# ll /etc/ssh/*key*
-rw-r-----. 1 root ssh_keys  227 Jan  7  2015 /etc/ssh/ssh_host_ecdsa_key
-rw-r--r--. 1 root root      162 Jan  7  2015 /etc/ssh/ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys 1675 Jan  7  2015 /etc/ssh/ssh_host_rsa_key
-rw-r--r--. 1 root root      382 Jan  7  2015 /etc/ssh/ssh_host_rsa_key.pub

 

二、配置基于SSH密钥的身份验证

2.1、基于SSH密钥的身份验证

之前远程连接时,都需要用户输入密码,这既不方便也不安全。ssh允许用户使用私钥-公钥方式进行身份验证。私钥文件用作身份验证的凭据,需要妥善保管。公钥并不苞米,将公钥复制到用户希望登录的系统,用于验证私钥。

使用命令ssh-keygen来生成密钥。这样就生成了私钥 ~/.ssh/id_rsa 和 公钥 ~/.ssh/id_rsa.pub。私钥和公钥的权限应该分别为600和644。

[student@desktop0 ~]$ ll .ssh/
total 8
-rw-------. 1 student student 1651 Jan  7  2015 authorized_keys
-rw-r--r--. 1 student student  181 Jun 26 10:51 known_hosts
[student@desktop0 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/student/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/student/.ssh/id_rsa.
Your public key has been saved in /home/student/.ssh/id_rsa.pub.
The key fingerprint is:
4e:4e:73:3c:9d:3a:9f:7c:d6:f5:b5:13:8e:08:9a:9f student@desktop0.example.com
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|         . . .   |
|        S + o    |
|       = + o   .o|
|        = + . o.*|
|       o  .= oo+o|
|        .E  +o  .|
+-----------------+
[student@desktop0 ~]$ ll .ssh/
total 16
-rw-------. 1 student student 1651 Jan  7  2015 authorized_keys
-rw-------. 1 student student 1679 Jun 26 11:11 id_rsa
-rw-r--r--. 1 student student  410 Jun 26 11:11 id_rsa.pub
-rw-r--r--. 1 student student  181 Jun 26 10:51 known_hosts

通过ssh-copy-id命令将密钥复制到目标系统上,它默认复制的是~/.ssh/id_rsa.pub,也可以用-i选项指定复制哪个公钥ssh-copy-id -i FILE remoteuser@remotehost。

比如将student在desktop上生成的公钥复制到server上的root用户,会提示输入root@server的密码,复制成了以后student再远程登录root@server0就不再需要密码了。

那么公钥放在远程主机哪里呢?放在远程主机远程用户目录下的文件authorized_keys里面。我们是ssh-copy-id  root@server0,那么公钥就放~root/.ssh/authorized_keys文件里面。

[student@desktop0 ~]$ ssh-copy-id root@server0
/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@server0's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@server0'"
and check to make sure that only the key(s) you wanted were added.

[student@desktop0 ~]$ ssh root@server0
Last login: Fri Jun 26 11:03:52 2020 from desktop0.example.com
[root@server0 ~]#
[root@server0 ~]# tail -n 1 .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqhQdZKRa7iHuCYAVRyLZ6MAHVQgeHhm8UCAn0JGA99PRR+llg7hnP3TRtD25z1PleDHZ1CWbTNYbROGxfeQ/vIfLQBQgfvJs47FMn8ggEPrEaFLX2g9GVk9RrxGdQPVcMCDRpPlbH1oyFPix3dihOyKbmOR6R89+EQWulstLFaxGTaT+BIhC1KgXCsECMAlONlcHiYbA+RH2MxS5UYHtQ/TN4wEdHa+4D2DOb+dfwzrfkG45MPv2GSp0onjMvaGGGD8w4SlMA0AjNxB+NQbCC3/hy1+4VcWIHDRJqZF6GOOc5cGfZICMi4YAOK/ibJB9FjHwiDV5m+NnJCzfMvSNr student@desktop0.example.com

远程注意和本地并不一定有相同用户名的用户,那么ssh远程连接的时候优先选择哪个用户呢?做个试验,在desktop上建立zhangsan用户,在server上配置user1、user2用户,并且zhangsan可以用密钥验证的方式以root、student、user1、user2身份远程登录server。假如我们不指定用户名会怎么样呢?是zhangsan@server,但是server上没有zhangsan啊!这个默认的用户就是由~zhangsan/.ssh/config 文件来控制的。文件里面可以设置多个主机。每个主机的设置由4行构成。

  • Host指对哪个主机生效。
  • StrictHostKeyChecking是对主机密钥是否强制检查。
  • PreferredAuthentications是默认使用哪个认证方式,publickey或者password。
  • User是默认登录的用户。
[zhangsan@desktop0 ~]$ cd .ssh
[zhangsan@desktop0 .ssh]$ vim config
[zhangsan@desktop0 .ssh]$ cat config
Host *.example.com *
    StrictHostKeyChecking no
    PreferredAuthentications publickey
    User user1
[zhangsan@desktop0 .ssh]$ ssh server0
Last login: Fri Jun 26 13:16:17 2020 from desktop0.example.com
[user1@server0 ~]$

2.2、自定义SSH服务配置

可以在/etc/ssh/sshd_config中修改OpenSSH服务。

限制root用户使用ssh登录。为了安全起见,禁止root用户通过ssh直接登录系统。将配置文件中的 PermitRootLogin yes 行去掉注释改为PermitRootLogin no,重启sshd服务使之生效,即可禁止root登录系统。另外,还可以改为PermitRootLogin without-password,只允许root进行密钥认证的登录,这个配置非常有用。

建议在 /etc/ssh/sshd_config 如下面配置时,配置密钥认证,用ssh-copy-id将密钥配置好。

PasswordAuthentication yes
PubkeyAuthentication yes
PermitRootLogin yes

密钥认证配置完成后,修改 /etc/ssh/sshd_config 配置文件为:禁止密码验证、允许密钥验证、只允许root密钥验证登录。重启sshd服务使之生效。

PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin without-password

另外,/etc/ssh/sshd_config 还有其它和sshd相关的配置。比如,修改ssh的端口、主机密钥、用户公钥存储也不一定在 ~/.ssh/authorized_keys文件等等。查看man 5 sshd_config知道更多。

Port 22

# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys

2.3、sftp传输文件

sftp登录,可以上传下载文件,非常方便。主要用到的命令是put和get。

[student@server0 ~]$ echo "test sftp" > f1
[student@server0 ~]$ ll
total 4
-rw-rw-r--. 1 student student 10 Jun 26 14:53 f1
[student@server0 ~]$ sftp root@server0
Connected to server0.
sftp> put ./f1
Uploading ./f1 to /root/f1
./f1                                            100%   10     0.0KB/s   00:00
sftp> get f2
Fetching /root/f2 to f2
/root/f2                                        100%    5     0.0KB/s   00:00
sftp> exit
[student@server0 ~]$ ll
total 8
-rw-rw-r--. 1 student student 10 Jun 26 14:53 f1
-rw-r--r--. 1 student student  5 Jun 26 14:54 f2
[student@server0 ~]$ cat f2
down
[student@server0 ~]$

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要在Linux安装OpenSSH服务器,可以按照以下步骤操作: 1. 打开终端窗口并以root用户身份登录。 2. 输入以下命令以更新软件包列表: apt-get update 3. 输入以下命令以安装OpenSSH服务器: apt-get install openssh-server 4. 安装完成后,输入以下命令以启动OpenSSH服务器: service ssh start 5. 如果您希望OpenSSH服务器在系统启动时自动启动,请输入以下命令: update-rc.d ssh defaults 6. 现在,您可以使用SSH客户端连接到您的Linux系统并远程管理它了。 希望这些步骤对您有所帮助! ### 回答2: 在Linux系统上安装OpenSSH服务器很简单。以下是一些基本步骤: 1. 打开终端并以管理员身份登录。 2. 使用适用于您的发行版的软件包管理器在系统上安装OpenSSH服务器。例如,如果您使用的是Debian或Ubuntu,可以使用以下命令: ``` sudo apt-get install openssh-server ``` 3. 安装过程中,您可能需要提供管理员密码以确认安装。在安装完成后,OpenSSH服务器将自动启动并在系统上运行。 4. 您可以通过检查OpenSSH服务器的状态来验证安装是否成功。在终端中运行以下命令: ``` sudo systemctl status ssh ``` 5. 如果看到类似于"Active: active (running)"的输出,这表示OpenSSH服务器正在运行。如果输出显示服务未运行,则可以使用以下命令手动启动它: ``` sudo systemctl start ssh ``` 6. 完成安装后,您可以使用SSH客户端通过网络连接到您的Linux系统。使用以下命令来连接到您的服务器: ``` ssh username@ip_address ``` 其中,username是您的用户名,ip_address是您的服务器IP地址。您将被要求输入密码来进行身份验证。 总之,安装OpenSSH服务器只需几个简单的步骤,就可以为您的Linux系统提供安全的远程访问。 ### 回答3: 在Linux安装OpenSSH Server非常简便。以下是Linux安装OpenSSH Server的步骤: 1. 打开命令终端。 2. 确保系统处于root或具有管理员权限的用户下。 3. 使用适用于你的Linux发行版的软件包管理器,如apt-get、yum、dnf、zypper或者pacman等,来安装openssh-server软件包。例如: 对于Debian/Ubuntu系统,可以使用以下命令: ``` sudo apt-get install openssh-server ``` 对于RHEL/CentOS系统,可以使用以下命令: ``` sudo yum install openssh-server ``` 对于Fedora系统,可以使用以下命令: ``` sudo dnf install openssh-server ``` 对于openSUSE系统,可以使用以下命令: ``` sudo zypper install openssh-server ``` 对于Arch Linux系统,可以使用以下命令: ``` sudo pacman -S openssh ``` 4. 安装过程可能需要一些时间,软件包管理器将自动下载所需的文件并进行安装。 5. 安装完成后,可以使用以下命令来启动OpenSSH Server服务: ``` sudo systemctl start sshd ``` 6. 若要确保OpenSSH Server服务在系统启动时自动启动,请使用以下命令: ``` sudo systemctl enable sshd ``` 7. 可以使用以下命令来检查OpenSSH Server服务的运行状态: ``` sudo systemctl status sshd ``` 如果输出显示服务正在运行,则表示安装和启动OpenSSH Server成功。 OpenSSH Server安装完成后,你的Linux系统就可以充当SSH服务器,允许远程访问和管理。你可以使用其他设备上的SSH客户端连接到你的Linux系统,并通过安全的加密通道进行远程访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦行僧(csdn)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值