软件包异地分发和安装解决方案

背景:
最近接到小需求,开发一个工具用于分发软件包到目标计算机,并支持安装和卸载目标计算机上的软件。软件运行在windows系统上,目标计算机有两台,一台是Linux debian系统,一台是windows系统。

解决方向
1、尽量少的安装第三方软件和环境设置;
2、软件执行和操作过程中不再需要人工操作(例如输入密码、确认执行)

解决思路
这里主要想到两种实现方式:
1、自己开发对端软件运行在目标计算机上,用于接收软件包和配置文件,并负责接收命令和反馈执行结果。
优点:接收命令和反馈结果方便、自己开发的软件部署方便
缺点:两台目标计算机的操作系统不同,代码要差异处理、软件包比较大,文件传输需要拆分和组合
2、尽量使用操作系统自带的软件实现文件传输和远程执行命令。
优点:开发工作量小,不用开发对端目标计算机上的软件
缺点:需要配置环境、获取执行结果不方便

解决方案
这里介绍解决方案二,通过操作系统自带的软件实现文件传输和执行命令,所以需要先配置环境:
一、执行远程命令
远程执行命令(在本地windows系统发送命令到远端的linux系统和windows系统),可以使用ssh命令:例如

ssh  root@ip "cd /opt/test/; ls"
ps: ssh 目标计算机用户名@目标计算机IP地址 “需要执行的命令,命令间使用分号间隔。当然这里也可以是执行一个脚本。”

但我们的计算机默认只安装了ssh客户端,并没有安装ssh服务端。所以需要首先在目标计算机安装ssh服务。
1、在Linux系统(debian)直接命令安装:

   sudo apt-get update
   sudo apt-get install ssh

2、在Windows系统(win10以上版本)
Win10桌面->右键菜单->显示设置->左上角,主页->应用->可选功能,然后添加可选功能OpenSSH服务器,点击安装即可。
在这里插入图片描述
安装完成后,使用管理员身份开启一个cmd窗口,再执行如下命令启动ssh服务:

net start sshd

在这里插入图片描述
ssh服务安装完成后,可以通过在本地使用ssh客户端远程登录ssh服务器来验证是否安装和启动正常:

ssh  用户名@IP
ps: 执行时需要手工输入密码验证通过后方可登录。

二、远程传输文件

解决了远程执行命令问题,接着是远程传输文件到目标计算机。我们使用scp工具,它是windows和linux系统都自带的工具,无需再安装。但通过scp工具传输文件需要输入密码,这在我们的代码里是不好交互的。解决办法是配置两台计算机之间的信任关系。配置成功后,ssh和scp命令执行时就不再需要输入密码。

配置服务器间信任关系:
1、先在本地windows侧生成密钥文件。
打开cmd命令窗口,执行命令:

 ssh-keygen
 ps: 执行过程中一路回车键即可。

在这里插入图片描述
此时会在当前用户路径 C:\Users\用户名\ .ssh 生成两个文件:
id_rsa和id_rsa.pub 在这里插入图片描述
这里的id_ras.pub文件即为公钥文件,后面会用到。

2、目标计算机是linux debian11系统建立信任关系
登录到目标linux系统,执行如下命令:

   cd ~/.ssh
   cat id_rsa.pub >> authorized_keys

修改/etc/ssh/sshd_config文件如下:
在这里插入图片描述
最后重启ssh服务:

      systemctl restart sshd
 或者 service sshd restart

此时正常的话,使用ssh登录debian服务器的普通用户就不用输入密码了。

重要: 此时创建的是windows系统用户和debian系统中普通用户的信任关系。但如果需要在debian系统安装软件,需要拥有root权限。所以,这里需要建立和Debian系统的root用户信任关系。这样执行安装命令时拥有root权限并且无需输入密码。

sudo cp -rf ~/.ssh /root  //把当前用户下的.ssh文件夹拷贝到root用户根目录下

再次修改/etc/ssh/sshd_config文件如下:

 #PermitRootLogin prohibit-password 改为 PermitRootLogin yes
 #Port 22 改为 Port 22

最后重启ssh服务:

      systemctl restart sshd
 或者 service sshd restart

此时正常的话,使用ssh登录debian服务器的root用户就不用输入密码了。

3、目标计算机是Windows系统建立信任关系
a. 先把上面本地计算机生成的id_rsa.pub 文件拷贝到目标计算机的 C:\Users\“用户名”.ssh 目录 下,并修改文件名称为 authorized_keys ,如果有多台计算机需要和此计算机建立信任关系,则把多台计算机的公钥文件内存都拷贝到authorized_keys文件中即可。
b. 再修改 C:\ProgramData\ssh\sshd_config 配置文件(注意这里的ProgramData文件夹默认是是隐藏文件夹,可以取消隐藏或者通过搜索找到)。
修改内容为:
确保以下3条没有被注释,后边的yes或no要写对

PubkeyAuthentication yes  #启用SSH密钥认证
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes #启用输入密码认证

确保以下2条有注释掉

#Match Group administrators
#AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

最后以管理员用户打开powershell软件,再重启ssh服务:

   net stop sshd
   net start sshd
   Set-Service sshd -StartupType Automatic  #设置开机自启动

测试:上面设置完windows和linux系统的信任关系后,可以使用ssh或者scp命令测试是否再需要输入密码。

附录:
windows10离线安装OpenSSH

https://blog.csdn.net/marwenx/article/details/106096790
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值