当由ansible而不是手动ssh连接运行时,needrestart的行为不同
我试图通过ansible运行该工具,以检查具有过时库的进程。 当我使用ansible中的命令或shell模块运行needstart时,它会说我需要重新启动ssh守护进程。当我手动运行needrestart时,它表示没有包含过时库的进程 当我重新启动ssh守护程序时,这并没有什么区别。但是在重新启动远程服务器后,ssh守护进程不再作为我应该重新启动的服务列出 所以我真的不明白ansible的ssh连接和我的手动ssh连接之间的区别,这导致了不同的needrestart行为 任何帮助都将不胜感激 提前向您表示感谢,并致以最良好的问候当由ansible而不是手动ssh连接运行时,needrestart的行为不同,ansible,Ansible,我试图通过ansible运行该工具,以检查具有过时库的进程。 当我使用ansible中的命令或shell模块运行needstart时,它会说我需要重新启动ssh守护进程。当我手动运行needrestart时,它表示没有包含过时库的进程 当我重新启动ssh守护程序时,这并没有什么区别。但是在重新启动远程服务器后,ssh守护进程不再作为我应该重新启动的服务列出 所以我真的不明白ansible的ssh连接和我的手动ssh连接之间的区别,这导致了不同的needrestart行为 任何帮助都将不胜感激 提
马克斯 我的本地机器
$ 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
$ 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
我正在使用ssh代理连接到服务器:
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q user@jumphost.example.com"'
远程服务器
$ cat /etc/debian_version
8.6
$ python -V
Python 2.7.9
使用ansible
$ 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
$ 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
使用SSH
$ ssh example.com 'needrestart -b -l -r l'
NEEDRESTART-VER: 1.2
Killed by signal 1.
看起来您与较旧版本的ssh进程有活动连接。当ssh重新启动时,它不会终止保持活动连接的当前副本。如果它会这样做,那么ssh服务器sudo服务ssh restart将终止活动连接,您的服务器将断开 因此,当您重新启动sshd时,您只重新启动ssh部分,它接受新连接。所有现有连接都由旧ssh提供服务 为什么ansible在运行之间保留ssh旧ssh连接?因为ControlMaster功能。它在运行之间保持活动ssh连接,以加快新的运行 怎么办?关闭计算机上的活动ssh连接。尝试ps aux | grep ssh,您将看到一个充当ControlMaster的进程。杀死它,过时的连接应该被关闭