linux安装配置sshd

# 简介

  • SSH(Secure SHell)目的是要在非安全网络上提供安全的远程登录和其他安全服务

  • OpenSSH是 SSH 协议的免费开源实现,默认的SSH协议是版本2(支持RSA和DSA)

  • OpenSSH支持的用户认证方式有基于 PAM 的用户口令认证和用户密钥认证

# 安装

#查看SSH是否安装
rpm -qa | grep ssh
yum list installed | grep openssh-server
#卸载SSH
yum remove openssh-server

yum install -y openssl openssh-server
1
2
3
4
5
6
7

# 配置

# 修改配置

# 常见的配置选项

  • Port=22 设置SSH的端口号是22(默认端口号为22)

  • Protocol 2 启用SSH版本2协议

  • ListenAddress 192.168.0.222 设置服务监听的地址

  • DenyUsers user1 user2 foo 拒绝访问的用户(用空格隔开)

  • AllowUsers root osmond vivek 允许访问的用户(用空格隔开)

  • PermitRootLogin no 禁止root用户登陆

  • PermitEmptyPasswords no 用户登陆需要密码认证

  • PasswordAuthentication yes 启用口令认证方式

image-20220224150146478

# 常用配置

vim /etc/ssh/sshd_config

# 将 PermitRootLogin, RSAAuthentication, PubkeyAuthentication 设置为 yes

Port 22  #定义ssh监听的端口号,默认为22 
ListenAddress 0.0.0.0  #设置ssh服务器绑定的ip地址,默认为所有可用的ip地址 

#禁用root账户登录,如果是用root用户登录请开启
PermitRootLogin yes # 要改这个要谨慎;要确定第二个帐号可用登陆或者免密设置成功;
 
# 是否让 sshd 去检查用户家目录或相关档案的权限数据,
# 这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。
# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
StrictModes no
 
# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
# 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
 
# 有了证书登录了,就禁用密码登录吧,安全要紧
PasswordAuthentication no
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 设置开机自动启动

注册使用服务

将sshd服务添加之自启动列表中

systemctl enable sshd

# systemctl enable sshd 等价于 systemctl enable sshd.service
1
2
3

并查看是否开启自启动sshd服务

systemctl list-unit-files | grep sshd
1

# 启动ssh的服务

systemctl start sshd.service

systemctl start sshd
service sshd start

service sshd restart
1
2
3
4
5
6

# docker内启动服务【要点】

# 安装库

yum install -y openssh-server openssh-clients
1
/usr/sbin/sshd -D &

[1] 11593
[root@628b677f368b app]# Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.

#创建sshd服务使用的的host key:
ssh-keygen -A 
#/usr/sbin/sshd-keygen -A
#或者/etc/ssh# ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key
#命令执行成功后,在 /etc/ssh 下会看到有两个文件生成:ssh_host_rsa_key 和 ssh_host_rsa_key.pub ,前者是私钥,后者是公钥
# ssh-keygen -t rsa #客户端设置

#创建sshd服务运行目录:
#mkdir /run/sshd
#启动ssh服务:
#/usr/sbin/sshd
/usr/sbin/sshd -D &

sshd -D &
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 修改root密码

进入容器普通设置

通过这种方式达成新镜像commit; docker commit xxx

root@e1c328726835:/etc/ssh# passwd root
New password: 
Retype new password: 

#测试本地连接,输入密码;
ssh localhost
1
2
3
4
5
6

在dockerfile中设置【推荐】

RUN echo 'root:Docker!' | chpasswd
#或者
RUN echo 'Docker!' | passwd --stdin root
1
2
3

正在运行的容器中创建/更改root密码

docker exec -itu root {containerName} passwd
1

运行Docker覆盖USER设置

在正在运行的容器中创建/更改 root 密码;

docker exec -itu 0 {container} passwd
1

用-u选项时,可以使用root用户(ID = 0)而不是提供的默认用户登录Docker容器

#docker exec -it --user $(username) $(containername) /bin/bash

docker exec -u 0 -it containername bash
1
2
3

# 免密码本机跳本机

为了免密码本机跳本机,执行如下命令:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

ssh localhost #至此,执行ssh localhost就能成功
1
2
3
4
5

# 防火墙设置

sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
1

# 检查服务是否启动

本地测试

ps -e | grep sshd
#或者
netstat -an | grep 22
1
2
3

客户端通过ssh远程连接服务器

ssh username@hostname(hostIP)
  
ssh user1@192.168.10.10
1
2
3

# 客户端免密设置【要点】

# 配置说明

客户端安装git 默认会有这两个命令;

涉及两命令:

  • ssh-keygen 产生公钥与私钥对.
  • ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ssh , 和 ~/.ssh/authorized_keys的权利;

生产私钥四个文件夹

  • authorized_keys: 存放远程免密登录的公钥, 主要通过这个文件记录多台机器的公钥。
  • id_rsa: 生成的私钥文件
  • id_rsa.pub: 生成的公钥文件
  • known_hosts: 已知的主机公钥清单

公钥拷贝到服务器的~/.ssh/authorized_keys文件中方法有如下几种:

最常用的三种方式,一是通过 ssh-copy-id 命令,二是通过 scp 命令,三是手工复制。

  • 通过ssh-copy-id程序,ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.111.111 推荐;

  • 将公钥通过scp拷贝到服务器上,然后追加到~/.ssh/authorized_keys文件中,这种方式比较麻烦;

    scp -P 22 ~/.ssh/id_rsa.pub user@host:~/

  • 可以通过cat ~/.ssh/id_rsa.pub | ssh -p 22 user@host ‘cat >> ~/.ssh/authorized_keys,这个也是比较常用的方法,因为可以更改端口号。

# 本机跳本机免密码

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

/usr/sbin/sshd -D &
1
2
3
4
5

# 实践

ssh-keygen -t rsa
#注意空格和换行;
#公钥文件内容会追加写入到userb的 .ssh/authorized_keys 文件中
cat .ssh/id_rsa.pub 

#将公钥上传到server服务器的ssh/authorized_keys 文件中
#ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.111.111
ssh-copy-id -i ~/.ssh/id_rsa.pub samy@192.168.11.111 
#查看serverB服务器userb用户下的 ~/.ssh/authorized_keys文件
cat .ssh/authorized_keys

#以看到登陆后会有known_hosts文件生成
ssh userb@192.168.11.111
1
2
3
4
5
6
7
8
9
10
11
12
13
上次更新: 2022/04/15, 05:41:32
×