我试图通过ansible运行needrestart工具来检查过时库的进程.当我使用来自ansible的命令或shell模块运行needstart时,它说我需要重新启动我的ssh守护进程.当我手动运行needrestart时,它表示没有过时库的进程.
当我重新启动ssh守护进程时,它没有任何区别.但重新启动远程服务器后,ssh守护程序未列为服务,我应该重新启动.
所以我真的不明白来自ansible和我的手动ssh连接的ssh连接之间的区别导致了needrestart的不同行为.
任何帮助,将不胜感激!
先谢谢你,最好的问候
Max
我的本地机器
$ python -V
Python 2.7.13
$ ansible --version
ansible 2.2.0.0
$ cat ansible.cfg
[defaults]
inventory = hosts
ask_vault_pass = True
retry_files_enabled = False
Run Code Online (Sandbox Code Playgroud)
我使用ssh代理连接到服务器:
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q user@jumphost.example.com"'
Run Code Online (Sandbox Code Playgroud)
远程服务器
$ cat /etc/debian_version
8.6
$ python -V
Python 2.7.9
Run Code Online (Sandbox Code Playgroud)
使用ansible
$ ansible example.com -m command -a 'needrestart -b -l -r l'
Vault password:
example.com | SUCCESS | rc=0 >>
NEEDRESTART-VER: 1.2
NEEDRESTART-SVC: ssh.service
$ ansible example.com -m shell -a 'needrestart -b -l -r l'
Vault password:
example.com | SUCCESS | rc=0 >>
NEEDRESTART-VER: 1.2
NEEDRESTART-SVC: ssh.service
Run Code Online (Sandbox Code Playgroud)
使用SSH
$ ssh example.com 'needrestart -b -l -r l'
NEEDRESTART-VER: 1.2
Killed by signal 1.
Run Code Online (Sandbox Code Playgroud)
看起来您与旧版本的 ssh 进程有一个活动连接。当 ssh 重新启动时,它不会终止当前的副本,从而保持活动连接。如果它这样做,ssh servers sudo service ssh restart就会终止活动连接,并且您的服务器将会损坏。
因此,当您这样做时systemctl restart sshd,您只重新启动 ssh-part,它接受新连接。所有现有连接均由旧 ssh 提供服务。
为什么 ansible 在运行之间保持 ssh 旧的 ssh 连接?由于 ControlMaster 功能。它在运行之间保持活动的 ssh 连接以加快新运行的速度。
该怎么办?关闭计算机上活动的 ssh 连接。尝试ps aux|grep ssh一下,您将看到一个充当 ControlMaster 的进程。杀死它,并且应该关闭过时的连接。
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |