pssh 不能执行指定用户命令

问题:

一个脚本a.sh(必须root用户执行),在本地可以运行,通过pssh  -h ip_file "cd /home/byte/a.sh"不能执行。

原因:

分析应该是ssh没有获取到root权限,可能原因是操作系统安装时有多个用户且默认远程用户非root。通过查看可知是ssh默认登录用户不是root

Linux系统设置涉及到两种启动shell的方式一个是本地登录另一个是远程登录,

本地直接登录shell终端环境调用过程是 ~/.bash_profile->~/.bashrc

ssh登录时直接调用~/.bashrc,导致只是以普通用户登录,没有获取到root权限

解决办法:

1.修改命令,先执行root的.bash_profile来获取root权限

pssh  -h ip_file "source  /root/.bash_profile;cd /home/byte/a.sh"

2.修改.ssh配置文件

vi /etc/.ssh/enviroment 添加所需环境变量,格式如下

VAR1=VALUE1

VAR2=VALUE2

比如添加 USER=root

并修改/etc/ssh/sshd_config 文件中的PermitUserEnvironment=yes(会带来安全问题,具体请看备注1链接)

下次登录就直接获取root权限了

备注:

1. 安全问题

PermitUserEnvironment
             指定是否允许 sshd(8) 处理 ~/.ssh/environment 以及 ~/.ssh/authorized_keys 中的 environment= 选项。
             默认值是"no"。如果设为"yes"可能会导致用户有机会使用某些机制(比如 LD_PRELOAD)绕过访问控

参考连接 http://www.2cto.com/os/201401/272738.html        http://serverfault.com/questions/527638/security-risks-of-permituserenvironment-in-ssh
2.相关文件解释/bin/bash
       The bash executable
/etc/profile
       The systemwide initialization file, executed for login shells
~/.bash_profile
       The personal initialization file, executed for login shells
~/.bashrc
       The individual per-interactive-shell startup file
~/.bash_logout
       The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
       Individual readline initialization file

参考:http://serverfault.com/questions/527638/security-risks-of-permituserenvironment-in-ssh

http://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment

时间: 2024-10-11 00:48:11

pssh 不能执行指定用户命令的相关文章

第三部分 管理篇 第九章 MongoDB shell之系统命令、用户命令

1.命令操作 MongoDB Shell不仅仅是一个交互式的shell,它页支持执行指定JavaScript文件,也支持执行指定的命令片段,有了这个特性,就可以将MongoDB与Linux shell完美结合,完成大部分的日常管理和维护工作.Shell命令其实控制台底层的查询语句都是用JavaScript脚本完成的. 系统相关 1.1.help查看命令 [[email protected] bin]# ./mongo MongoDB shell version: 2.6.6 connecting

Centos 7关于rc.local脚本命令开机不执行及指定用户启动的解决方法

开机不启动 在实际生产场景中,我们喜欢在安装了一些软件服务后,将软件设置为开机自启动,设置为开机自启动有两种方法: 1)  设置为chkconfig,可以编写脚本,查看设置开机自启动的命令 –add表示添加程序自启动, --list表示查看. 以后的程序如果需要使用chkconfig开机自启动,那么需要在启动程序中加入三行: # chkconfig:2345 20 80 #description: Saves and restores system entropy pool for \ #   

shell,切换用户,执行指定,脚本

某些情况下,比如oracle,必须切换到指定用户才能重启oracle. 每次手动操作比较麻烦,可以写个脚本. 自动输入密码的功能,需要用到expect 先安装 yum install -y expect 编辑脚本 vi aa.sh #!/usr/bin/expect spawn su oracle -c "/opt/1.sh" expect "password: " send "123456\r" interact exit 备注: 1.  第一

利用PROMPT_COMMAND记录每个用户执行的历史命令

在/etc/profile里加入以下几行 export HISTORY_FILE=/var/log/command-`date '+%y-%m-%d'`.log export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### USER:$USER IP:$SSH_CLIENT PS:$SSH_TTY #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HIST

shell脚本中切换用户执行相应的命令或者shell脚本的方法

通常在执行自动化过程中可能需要将root用户切换到其他用户进行执行,如:oralce 但是,执行的命令又要回到root用户下,继续执行root用户下的其他命令. 此时需要了解 su 命令中的参数 -c  或 -s 比如: # su - oracle -c "pwd"/home/oracle 或 su - oracle -s /bin/sh test.sh 此时执行的test.sh中相关命令要在bin/sh下,换句话说,bin/sh支持的命令才能执行. 当然我们可以将结果重定向到其他的文

Exchange获取指定用户的邮箱同步的移动设备列表

适用于: Exchange Server 2010 SP2, Exchange Server 2010 SP3 https://technet.microsoft.com/zh-cn/library/aa996908(v=exchg.141).aspx 使用 Get-ActiveSyncDeviceStatistics cmdlet 可以执行以下操作: 检索配置为与指定用户的邮箱同步的移动电话列表. 返回有关这些移动电话的统计信息列表. Get-ActiveSyncDeviceStatistic

vsftpd添加用户并限制目录(指定用户访问指定目录)

开发那边更新速度如果比较快,每天会有无数的文件或者目录交给运维更新上线,这样比较麻烦,干脆给他们搭FTP让他们自己上传修改,但有一问题,就是权限问题,公司五个站点有五个目录,每个人负责不同的站点,如何让各自都不干扰别人,或者说不到别人的目录搞“破坏”!下面解决这个问题! 一.检查Linux中vsftpd的安装情况. 就不啰嗦了 二.将系统中的SELinux关闭,然后重新启动电脑(不关闭的话修改好标签也可以) 关闭SELinux的方法: 修改/etc/selinux/config文件中的SELIN

Centos下执行定时任务Crontab命令介绍

1.Cron的启动与关闭 由于Cron是Linux的内置服务,可以用以下的方法启动.关闭这个服务: /sbin/service crond start           //启动服务 /sbin/service crond stop            //关闭服务 /sbin/service crond restart        //重启服务 /sbin/service crond reload         //重新载入配置 2.Cron配置文件 2.1全局配置文件 crontab

Linux 定时执行shell脚本命令之crontab

crontab可以在指定的时间执行一个shell脚本以及执行一系列Linux命令 例如:服务器管理员定时备份数据库数据.日志等 详解: 常用命令: crontab –e //修改 crontab 文件,如果文件不存在会自动创建. crontab –l //显示 crontab 文件. crontab -r //删除 crontab 文件. crontab -ir //删除 crontab 文件前提醒用户. service crond status //查看crontab服务状态 service