关于配置sshd的一些操作(代码片段)

卷王2048 卷王2048     2022-12-04     472

关键词:

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

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

开机自动运行脚本的思路

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的一些操作(代码片段)

关于服务器自动化配置的一些操作自动化配置服务器,其本质就是开机自动运行脚本开机自动运行脚本的思路1.以某一用户身份去登陆服务器,在linux系统下会默认运行用户家目录下的.bashrc配置文件2.linux或unix系统下,... 查看详情

关于linux系统-sshd服务-allowusers与allowgroups-选项的安全加固配置(代码片段)

...们可能会看到配置有AllowUsers与AllowGroups的安全加固选项,关于两个选项的说明如下:从选项名称上就可以知道这两个是选项,是属于白名单选项的,在安全中,如果能使用白名单模式,肯定是更安全的这里我们先说一下 AllowU... 查看详情

关于linux中批量配置ssh免密的一些笔记(代码片段)

写在前面今天和小伙伴们分享批量配置SSH免密的一些笔记传统的运维场景可以通过Ansible等运维工具处理在安装使用一些运维工具,比如Ansible,或则一些pass组件,需要配置ssh免密,sudo免密的操作今天和小伙伴分享... 查看详情

关于linux中批量配置ssh免密的一些笔记(代码片段)

写在前面今天和小伙伴们分享批量配置SSH免密的一些笔记传统的运维场景可以通过Ansible等运维工具处理在安装使用一些运维工具,比如Ansible,或则一些pass组件,需要配置ssh免密,sudo免密的操作今天和小伙伴分享... 查看详情

关于linux中批量配置ssh免密的一些笔记(代码片段)

写在前面今天和小伙伴们分享批量配置SSH免密的一些笔记传统的运维场景可以通过Ansible等运维工具处理在安装使用一些运维工具,比如Ansible,或则一些pass组件,需要配置ssh免密,sudo免密的操作今天和小伙伴分享... 查看详情

sshd的配置和优化(代码片段)

sshd的配置和优化sshd服务器端的配置文件为/etc/ssh_config配置文件中的一些常用参数常用参数说明port监听端口号ListenAddressip监听的IP地址LoginGraceTime发起连接后多少时间内必须登录超时断开连接PermitRootLogin是否允许root登录StrictModes... 查看详情

关于linux中网络连接配置(networkmanager)的一些笔记(代码片段)

写在前面嗯,准备RHCA,学习整理这部分知识NetworkManager其实是RHCAS的内容博文内容为常见的配置操作回顾:NetworkManager简述命令行的方式配置网络连接修改配置文件的方式配置网络连接谁有权限修改网络连接配置傍晚... 查看详情

关于数据库的一些基本操作语句(代码片段)

 ♦♣ 一些常见的数据库操作语句======创建一个表======CREATETABLE`test1`(`id`INT(6)UNSIGNEDNOTNULLAUTO_INCREMENTPRIMARYKEY,`name`VARCHAR(30)NOTNULL,`age`VARCHAR(30)NOTNULL,`timestamp`TIMESTAMPNOTNULL)ENGI 查看详情

关于wordclou的一些简单操作(代码片段)

详细讲解一下怎么用python的三方库wordcloud制作一个关于歌曲《Vincent》的歌词,有特别背景的云词效果,如图所示:首先的先准备好一张背景图,为了云词效果,可以实现修改一下,为了方便识别:然后就是歌曲《Vincent》的txt文... 查看详情

关于使用高德地图的一些常用操作(代码片段)

1.引入高德地图如何去掉地图上的logo.amap-logodisplay:none;2.地图上添加图标newAMap.Marker(icon:require(‘../../../assets/img/platform.png‘),offset:newAMap.Pixel(-12,-16),position:[120.236522,30.183376],map:map)3.设定自己想要的地 查看详情

关于promise的一些用法(代码片段)

Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。Promise对象有以下两个特点。(1)对象的状态不受外界影响。Pr... 查看详情

关于vscode一些配置(代码片段)

一。 基本操作1.创建完项目, code.  直接在vscode 中打开  2.设置--首选项 检测 package.json 文件  点击serve 是可以运行 3.常用的vscode 插件 4. 左侧项目文件控制显示隐藏... 查看详情

关于cpu的一些操作(cpu设置超频)(代码片段)

常见的几种CPU模式:1、ondemand:系统默认的超频模式,按需调节,内核提供的功能,不是很强大,但有效实现了动态频率调节,平时以低速方式运行,当系统负载提高时候自动提高频率。以这种模式运行不会因为降频造成性能降... 查看详情

关于git的一些基本操作:(代码片段)

关于git的一些基本操作:git更改远程仓库地址,强行推送远程仓库:#####去掉远程仓库的关联*gitremotermorigin添加远程仓库关联gitremoteaddorigin地址(这里的地址是这个地址,别写复制错误了)如下图:强行推送gitpushorigin--force可能... 查看详情

python关于文件操作的一些理解(代码片段)

在用python进行数据处理编程中,往往涉及到文件IO口读写,IO口的读写性能会极大的影响程序的运行时间。在进行文件写入时,一般会存在两种情况。第一种是数据到来马上进行数据写入,即来一条写一条,第二种是数据到来时... 查看详情

关于linux中安全方面的一些笔记(代码片段)

写在前面笔记是学习整理的,大都老师讲课内容,适合温习,不适合新手。整理了一份,希望对小伙伴有帮助.生活加油,天天开心!博文主要围绕以几个方面:Linux基本防护:账户安全、文件系统安全、... 查看详情

关于git分支变基操作的一些笔记(代码片段)

写在前面今天和小伙伴们分享一些Git分支变基操作的笔记博文为《ProGit》读书笔记整理内容涉及:变基的基本操作多分支变基变基的风险变基和合并的比较感谢开源这本书的作者和把这本书翻译为中文的大佬们理解不足小伙... 查看详情

关于linux系统-sshd服务-passwordauthentication-选项的加固配置

关于sshd服务的主配置文件,/etc/ssh/sshd_config 有一个选项叫做PasswordAuthentication,根据单词意思、就知道此选项是与密码相关的即可以知道此值默认为yes,即使不写或者注释,代表是允许用户通过密码进行ssh登录有时我们可以... 查看详情