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
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 启用口令认证方式
# 常用配置
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
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
2
3
并查看是否开启自启动sshd服务
systemctl list-unit-files | grep sshd
# 启动ssh的服务
systemctl start sshd.service
systemctl start sshd
service sshd start
service sshd restart
2
3
4
5
6
# docker内启动服务【要点】
# 安装库
yum install -y openssh-server openssh-clients
/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 &
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
2
3
4
5
6
在dockerfile中设置【推荐】
RUN echo 'root:Docker!' | chpasswd
#或者
RUN echo 'Docker!' | passwd --stdin root
2
3
正在运行的容器中创建/更改root密码
docker exec -itu root {containerName} passwd
运行Docker覆盖USER设置
在正在运行的容器中创建/更改 root 密码;
docker exec -itu 0 {container} passwd
用-u选项时,可以使用root用户(ID = 0)而不是提供的默认用户登录Docker容器
#docker exec -it --user $(username) $(containername) /bin/bash
docker exec -u 0 -it containername bash
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就能成功
2
3
4
5
# 防火墙设置
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
# 检查服务是否启动
本地测试
ps -e | grep sshd
#或者
netstat -an | grep 22
2
3
客户端通过ssh远程连接服务器
ssh username@hostname(hostIP)
ssh user1@192.168.10.10
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 &
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
2
3
4
5
6
7
8
9
10
11
12
13