SSH脚本 登录后去除登录的欢迎提示

问题描述

在编写脚本SSH登录服务器并输出操作到日志文件时,SSH登录成功的欢迎提示也会被写入日志文件中,其实时可以去掉的。

  • 登录脚本
1
2
3
ssh -q $remote_host >>$log_file 2>&1  <<EOF
echo "登录成功,开始执行服务器操作..."
EOF
  • 日志输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-109-generic x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage

* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.

https://ubuntu.com/engage/secure-kubernetes-at-the-edge
New release '22.04.3 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

登录成功,开始执行服务器操作...

可以看出,虽然不影响脚本的实际功能,但是日志记录会记录大量无用的信息。

快速解决

1. 登录脚本添加 -t bash

1
2
3
ssh -q $remote_host -t bash >>$log_file 2>&1  <<EOF
echo "登录成功,开始执行服务器操作..."
EOF

其中 -t bash 选项的作用是告诉 SSH 在建立连接后立即启动一个交互式的 Bash Shell,使得用户可以在远程主机上执行命令和进行交互。

输出日志

1
登录成功,开始执行服务器操作...

2. 解释 -t bash

说大白话就是指定SSH 登录成功之后使用 shell 为 bash,所以改为 -t sh 也是一样,知识使用的 shell 变成了 sh,为了演示,我们修改登录脚本如下;

1
2
3
ssh -q $remote_host -t bash >>$log_file 2>&1  <<EOF
echo "登录成功,当前使用的 SHELL 为 $SHELL"
EOF

对应的日志输出一下:

1
登录成功,当前使用的 SHELL 为 /bin/bash

再把登录脚本修改为 sh 如下:

1
2
3
ssh -q $remote_host -t sh >>$log_file 2>&1  <<EOF
echo "登录成功,当前使用的 SHELL 为 $SHELL"
EOF
1
登录成功,当前使用的 SHELL 为 /bin/sh

3. 欢迎提示消失的原因

欢迎提示的根源

首先欢迎提示词其实是写在 /etc/profile 等一下了配置文件中的,并不是直接在 /etc/profile,而是它会再调用其他的配置文件,其他配置文件内部就有输出欢迎内容代码。

因为 SSH 登录成功之后,SHELL 都会一直加载 /etc/profile~/.profile 等配置文件,其中 ~/.profile 内部又会调用 ~/.bashrc/etc/profile 内部也会调用 /etc/bash.bashrc

添加-t bash的变化

虽然添加 -t bash 主要是为了指定使用的 Shell,但是也会改变 SHELL 调用配置脚本的规则改变(具体的变化没有研究和验证),比如指定 -t bash 后,~/.profile 将不会被加载,而是直接加载 ~/.bashrc/etc 目录下的配置文件规则也改变了最终导致输出欢迎提示的配置脚本没有执行,所以就看不到欢迎提示了。