ssh远程执行服务器命令,ssh远程连接服务器执行命令

问题

首先说一下使用ssh远程连接服务器执行命令的方法:

为了方便描述,这里把测试服务器称之为A1,目标服务器称之为A2

A1与A2之间首先要建立ssh免密登录,在A1上生成公钥和私钥

ssh-keygen -t rsa -f id_rsa -P ''

获取A1的公钥

vim ~/.ssh/id_rsa.pub

将A1的公钥拷贝到A2的authorized_keys文件中保存。注意一个公钥中间不能有空格或换行!

在A1上验证免密登录是否配置成功

ssh -p A2port A2user@A2ip

如果可以直接登录到A2,则配置成功!

a6f12d5c3635?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

在A1远程连接A2执行命令

ssh -p A2port A2user@A2ip "rm -fr test"

下面来说问题:

ssh在远程连接服务器执行命令的时候,经常会遇到环境变量的问题,如下:

/data/resin-pro-4.0.49/bin/resin.sh: line 44: exec: java: not found

如果出现上面的提示,则说明环境变量配置有问题。

先来说解决办法

解决

访问A2上/etc/profile文件,拷贝文件中的环境变量,例如JAVA_HOME, PATH等等

将环境变量拷贝至~/.bashrc文件保存

source ~/.bashrc

问题解决!

原因及拓展

这里就要说明bash有两种方式interactive + login shell模式和non-interactive + non-login shell模式

在服务器上执行命令,走的是interactive + login shell模式,而通过远程登录执行命令,走的是non-interactive + non-login shell模式。

这两种模式对于环境变量的读取是有区别的。

interactive + login shell模式

Shell首先会加载/etc/profile文件,然后再尝试依次去加载下列三个配置文件之一,一旦找到其中一个便不再接着寻找:

~/.bash_profile

~/.bash_login

~/.profile

non-interactive + non-login shell模式

它不会去执行/etc/profile文件,而会去用户的HOME目录检查.bashrc并加载

所以当远程执行命令时,我们只需要让~/.bashrc文件中的环境变量与/etc/profile中的环境变量一致即可!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值