关于配置sshd的一些操作

Posted 卷王2048

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于配置sshd的一些操作相关的知识,希望对你有一定的参考价值。

关于服务器自动化配置的一些操作

自动化配置服务器,其本质就是开机自动运行脚本

开机自动运行脚本的思路

1.以某一用户身份去登陆服务器,在linux系统下会默认运行用户家目录下的.bashrc 配置文件

2.linux或unix系统下,/etc/rc.d/rc.local 用于添加开机启动命令

问题:基于 Debian 的 Linux 系统默认支持 rc-local.service 服务,这个服务主要用来在系统启动时运行用户自定义的脚本命令等。只有在centos或Ubuntu16以下的才有。

3.对于docker容器内脚本自运行的方法,是在dockerFile 中用 ENTRYPOINT[/bin/bash,脚本]

docker-compose启动容器后执行脚本或命令不退出 | 运行内部程序

知道了以上的思路,我们想开机自动执行某脚本的思路是:

1.在.bashrc中执行对应脚本

2./etc/rc.local是/etc/rc.d/rc.local的软连接,软连接相当于windows的快捷键

研究.bashrc

让我们来看一下阿里云ubuntu20.04的默认.bashrc,(我把其中的英文注释都翻译的一遍)

# ~.bashrc:由 bash(1) 为非登录 shell 执行。有关别名定义的示例,请参见 usrsharedocbashexamplesstartup-files(在 bash-doc 包中)。
# 您可能希望将所有添加到一个单独的文件中,例如 ~.bash_aliases,而不是直接在此处添加它们。
# 请参阅 bash-doc 包中的 usrsharedocbash-docexamples。

# 如果不以交互方式运行,则不要执行任何操作
[ -z "$PS1" ] && return

# 不要在历史记录中放置重复的行。有关更多选项,请参见 bash(1)
# ...或强制ignoreups和ignorespace
HISTCONTROL=ignoredups:ignorespace

# 追加到历史文件,不要覆盖它
shopt -s histappend

# 要设置历史长度,请参见 bash(1) 中的 HISTSIZE 和 HISTFILESIZE
HISTSIZE=1000
HISTFILESIZE=2000

# 检查每个命令后的窗口大小,如有必要,
# 更新 LINES 和 COLUMNS 的值。
shopt -s checkwinsize

# 对非文本输入文件更友好,请参阅lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# 设置变量标识您工作的 chroot(在下面的提示中使用)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# 设置一个花哨的提示(非颜色,除非我们知道我们“想要”颜色)
case "$TERM" in
    xterm-color) color_prompt=yes;;
esac

# 如果终端有能力,取消注释彩色提示;转身
# 默认关闭以不分散用户的注意力:终端窗口中的焦点
# 应该在命令的输出上,而不是在提示符上
# 强制颜色提示=是

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
	# 我们有颜色支持;假设它符合 Ecma-48
	# (ISOIEC-6429)。 (缺乏这样的支持是极其罕见的,而且这样的
	# 案例倾向于支持 setf 而不是 setaf。)
	color_prompt=yes
    else
	color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='$debian_chroot:+($debian_chroot)\\[\\033[01;32m\\]\\u@\\h\\[\\033[00m\\]:\\[\\033[01;34m\\]\\w\\[\\033[00m\\]\\$ '
else
    PS1='$debian_chroot:+($debian_chroot)\\u@\\h:\\w\\$ '
fi
unset color_prompt force_color_prompt

# 如果这是一个 xterm,则将标题设置为 user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\\[\\e]0;$debian_chroot:+($debian_chroot)\\u@\\h: \\w\\a\\]$PS1"
    ;;
*)
    ;;
esac

# 启用 ls 的颜色支持并添加方便的别名
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #别名 dir='dir --color=auto'
    #别名 vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# 更多 ls 别名
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# ~.bashrc:由 bash(1) 为非登录 shell 执行。有关别名定义的示例,
# 请参见 usrsharedocbashexamplesstartup-files(在 bash-doc 包中)。
# 您可能希望将所有添加到一个单独的文件中,例如 ~.bash_aliases,
# 而不是直接在此处添加它们。请参阅 bash-doc 包中的 usrsharedocbash-docexamples。

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# 启用可编程完成功能(您不需要启用,如果 /etc/bash.bashrc and /etc/profile/sources /etc/bash.bashrc 已经启用 
#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
#    . /etc/bash_completion
#fi

下面是一段.bashrc详细的说明:

如果你运行一个基于 Unix 或者类 Unix 的操作系统,bash 很有可能是作为默认终端被安装的。虽然存在很多不同的 shell,bash 却是最常见或许也是最主流的。如果你不明白那意味着什么,bash 是一个能解释你输入进终端程序的东西,并且基于你的输入来运行命令。它在一定程度上支持使用脚本来定制功能,这时候就要用到 .bashrc 了。

为了加载你的配置,bash 在每次启动时都会加载 .bashrc 文件的内容。每个用户的 home 目录都有这个 shell 脚本。它用来存储并加载你的终端配置和环境变量。

终端配置可以包含很多不同的东西。最常见的,.bashrc 文件包含用户想要用的别名。别名允许用户通过更短的名字或替代的名字来指向命令,对于经常在终端下工作的人来说这可是一个省时利器。

总结.bashrc的作用

1.配置命令的一些别名

2.配置颜色支持

3.在bash终端被启动时,执行文件中的一些shell语句

一个实际的案例

对于一个把所有服务都放在一个容器中的项目,启动项目需要运行多个环境

由于有多个需要一直启动的服务,所以需要通过shell来操作tmux,来同时运行多个服务

启动每个项目的脚本runacapp:

#! /bin/bash


USER_PASSWORD=
USERNAME=doctao
WORKDIR=/home/$USERNAME/acapp
#
cd $WORKDIR || exit
#su- $USERNAME

echo $USER_PASSWORD | sudo -S /etc/init.d/nginx start
echo $USER_PASSWORD | sudo -S redis-server /etc/redis/redis.conf

# 后台新建一个session
tmux new-session -d -s acapp_workspace

#向选择的窗口发送指令

tmux send-keys "uwsgi --ini scripts/uwsgi.ini" C-m

#多次切割后每个小窗口的编号会变化
tmux split-window -v

#启动`django_channels`服务

tmux send-keys "daphne -b 0.0.0.0 -p 5015 acapp.asgi:application" C-m

#多次切割后每个小窗口的编号会变化

#该命令会把当前工作区域分成左右两个小窗格,光标会移动到右面的窗口
tmux split-window -h

tmux send-keys "cd match_system/src/" C-m
tmux send-keys "chmod +x main.py" C-m
tmux send-keys "./main.py" C-m


#tmux select-pane -t 1
#tmux send-keys "command" C-m
#tmux send-keys "cd /home/zcmlc/go/src/zcm_activity" C-m
#tmux select-pane -t 2
#tmux send-keys "mysql -uroot -p123456 --host 192.168.1.221 --sigint-ignore --auto-vertical-output" C-m
#tmux send-keys "use data" C-m
#tmux -2 attach-session -t ssh  //挂载到之前运行的session上

想要在容器启动时自运行这个脚本,只需要在 .bashrc 中添加:

if [ -f /home/doctao/acapp/runacapp.sh ]; then
      bash /home/doctao/acapp/runacapp.sh
fi

关于配置容器ssh连接的方法

想要容器可以被ssh,需要sshd

要想在镜像构建时下载sshd,或其他各种软件时,会碰到如下问题:

1.容器是一个极简的操作系统,容器中自带的软件源几乎没有东西可以下载

2.在运行语句时,一旦某一句下载命令失败,构建会停止,如果选择 -y,也需要输出错误日志

3.sshd要想可以连接,需要更改配置文件参数

4.由于需要copy一些配置文件,需要解决跨系统传输时文件格式的问题(行末的\\n)

apt-get命令详解(超详细)

1.下载问题的解决

要想让容器可以下载软件,必须更换软件源

方法

1.阿里源/etc/apt/sources.list的文件内容

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

2.将阿里源写在文件中通过dockerfile中的COPY命令将文件传在容器中

# 更换阿里源
COPY ./db/sources.list /etc/apt/sources.list

3.要想成功使用阿里源,必须安装其共钥,具体公钥的key,需要先运行一遍看一下日志中缺少的key

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 871920D1991BC93C
#每一行最后的一串字符,就是在日志中需要你自己找的key

4.更新软件源的命令

 #更新软件源
 apt-get clean
 apt-get update

5.下载必要软件

apt-get -y install vim
apt-get -y install openssh-server
apt-get -y install tofrodos

6.想要用户可以远程ssh登陆容器,必须修改配置文件/etc/ssh/sshd_config

将配置信息写入文件

echo 'RSAAuthentication yes \\n\\
        PubkeyAuthentication yes \\n\\
        AuthorizedKeysFile .ssh/authorized_keys \\n\\
        PermitRootLogin yes \\n\\
        ClientAliveInterval 60'\\
>> /etc/ssh/sshd_config

7.将容器运行自启后的脚本文件放入容器并修正其格式,并放入.bashrc配置文件

#将开机运行脚本放入容器
COPY ./db/startup_run.sh /root/startup_run.sh

#修正文件格式
RUN fromdos /root/startup_run.sh

#添加脚本的运行权限
RUN chmod +x /root/startup_run.sh

#将bashrc脚本放入容器
COPY ./db/.bashrc /root/.bashrc

#修正文件格式
RUN fromdos /root/.bashrc

8.容器的root账户是默认没有密码的,需要设置一个密码

#添加root用户的密码
RUN  echo root:密码|chpasswd

以上是关于关于配置sshd的一些操作的主要内容,如果未能解决你的问题,请参考以下文章

关于配置sshd的一些操作

关于Linux系统-sshd服务-PasswordAuthentication-选项的加固配置

关于Linux系统-sshd服务-AllowUsers与AllowGroups-选项的安全加固配置

需要一些关于将数据放入 vb.Net 中的 DataGridView 的建议

总结sshd服务常用参数

sshd_config配置 详解