我试图在Kivy中做一个简单的应用程序,其中不同的设备可以使用SSH连接到使用OpenSSH的Linux服务器来读取和写入txt文件。
作为一个简单的应用程序,我的想法只是避免多个SSH连接,因此我在limits.conf
中编辑了文件/etc/security
,添加了一行:
user hard maxlogins 1
通过这种方式,我可以避免2个设备同时写入同一个文件。如果测试与Putty
或与另一个Android SSH客户端的连接一切正常(我一次只能有一个连接)但是如果我使用Paramiko我会得到一个奇怪的行为:我可以同时拥有多个连接!
这是我的代码:
# main.py
import kivy
kivy.require("1.9.0")
__version__ = "0.1"
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
import paramiko
class RootWidget(BoxLayout):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
def open_ssh(self):
try:
self.ssh.connect("192.168.0.200", 22, "user", "password", timeout = 1)
self.sftp = self.ssh.open_sftp()
self.ids.output.text = "SSH On"
except:
self.ids.output.text = "TX/RX Error"
def close_ssh(self):
self.sftp.close()
self.ssh.close()
self.ids.output.text = "SSH Off"
class ParamikoApp(App):
def build(self):
root = RootWidget()
return root
if __name__ == "__main__":
ParamikoApp().run()
# paramiko.kv
<RootWidget>:
orientation: "vertical"
Label:
id: output
BoxLayout:
Button:
id: open_button
text: "Open SSH"
on_press: root.open_ssh()
Button:
id: close_button
text: "Close SSH"
on_press: root.close_ssh()
所以我的问题是:
我的连接代码中缺少某些内容,或者Paramiko的工作方式与标准SSH客户端不同?
我还尝试使用MaxSessions
文件中的sshd_config
设置和Paramiko中的set_keepalive
参数,但没有幸运..
答案 0 :(得分:0)
通过这种方式,我可以避免2个设备同时写入同一个文件。
我认为你需要退一步思考你真正试图解决的问题。我可以想到有数百到数千种不同的方式让多个客户端记录数据。这是一个完全解决的问题。但这些方式都不涉及&#34;单用户SSH&#34;。您可能会找到&#34;答案&#34;对于你今天的问题,明天你肯定会遇到另一个障碍。
行业标准是让您的客户端与您的服务器通信HTTPS。你应该有充分的理由反对这里的流程。 Web服务器比SSH服务器更具可扩展性,更简单,更灵活。如果您便宜,您可以从Lets Encrypt获得免费证书。
您可以一次解决一个问题&#34;在许多层面上存在问题: