我有一个使用ubuntu14.04的VM。在窗户上跑。如果我使用VM桌面上的终端,我可以使用注册的SSH密钥连接到我的服务器,而不需要密码。
当我使用ssh客户端从窗口连接到VM时,我无法在没有密码的情况下登录服务器。
Linux(VM) ---> Server | Authentication with SSH keys works
SSH session ---> Linux(VM) ---> Server | Ask for the server password.
当我远程连接时,它如何使用在VM中注册的SSH密钥?
众所周知,我们可以在/etc/motd或文件/etc/issue.net中键入横幅,因此,登录到Linux机器的每个用户都将获得横幅消息,例如:
Red Hat Enterprise Linux Server release 6.8 (Santiago)
Kernel \r on an \m
##########################################################################
# Welcome to OBAMA house !!!
#
我和我的整个团队一起使用Linux服务器。我们都有自己的许可。
正如我们所知道的,我们可以很容易地将某人踢出去:who -u会列出所有带有PID的ssh登录,然后再列出kill -9任何人。
现在,假设某个坏人编写了一个bash脚本,它将循环所有登录用户并启动所有用户:
while true
do
# kill -9 each PID in `who -u`
done
另外,坏蛋将bash脚本配置为systemd,以便在启动或重新启动时自动启动。
现在,我想没有人可以远程登录了。
我的问题是,在不重新安装操作系统的情况下,是否有什么技术可以解决这个问题。
我想在python上写脚本,它可以在远程服务器上执行shell命令。
我发现我可以使用类似这样的东西:
# set environment, start new shell
p = Popen("/path/to/env.sh", stdin=PIPE)
# pass commands to the opened shell
p.communicate("python something.py\nexit")
但我不明白如何登录到远程Linux服务器并在那里执行shell命令?
我们目前在桌面上运行一个脚本,该脚本使用paramiko ssh到远程linux主机。一旦我们在远程linux主机上,我们执行另一个命令来登录到另一个远程机器。我们要做的是从paramiko将密钥传递给远程服务器,这样我们就可以再次使用它们ssh到另一台远程主机。
这将是linux中'ssh -A remotehost.com‘的等效功能。