linux远程执行命令
A. linux中ssh如何远程执行一条命令,而且不登录远程服务器
一 SSH命令使用技巧
- 远程登录
- 远程执行
ssh [email protected] 'command ...'
- 远程复制
scp [email protected]:/remote/path /local/path
scp /local/path [email protected]:/remote/path
- X forward
ssh -X [email protected]
xcommand ...
- Tunnel / Portforward
ssh -L 1234:remote.machine:4321 [email protected]
ssh -R 1234:local.machine:4321 [email protected]
ssh -L 1234:other.machine:4321 [email protected]
二, 实作
1) 禁止 root 登录
# vi /etc/ssh/sshd_config
PermitRootLogin no
2) 废除密码登录, 强迫使用 RSA 验证(假设 ssh 账户为 user1 )
# vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
# service sshd restart
# su - user1
$ mkdir ~/.ssh 2>/dev/null
$ chmod 700 ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 644 ~/.ssh/authorized_keys
登入端:
$ ssh-keygen -t rsa
(按三下 enter 完成﹔不需设密码,除非您会用 ssh-agent 。)
$ scp ~/.ssh/id_rsa.pub [email protected]:id_rsa.pub
(若是 windows client, 可用 puttygen.exe 产生 public key,
然后复制到 server 端后修改之, 使其内容成为单一一行.)
回到 server 端:
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_rsa.pub
$ exit
3) 限制 su / sudo 名单:
# vi /etc/pam.d/su
auth required /lib/security/$ISA/pam_wheel.so use_uid
# visudo
%wheel ALL=(ALL) ALL
# gpasswd -a user1 wheel
4) 限制 ssh 使用者名单
# vi /etc/pam.d/sshd
auth required pam_listfile.so item=user sense=allow file=/etc/ssh_users ōnerr=fail
# echo user1 >> /etc/ssh_users
B. 本地shell脚本中ssh到远程服务器并执行命令
在实际运用中在当前服务器执行命令后,需要在另一台服务器继续执行某些命令,和耐衫分开去到另一台服务器执行也是比较麻烦的,因此整理下集中执行的方式唤腔
1、首先配置ssh免密操作
Linux 下实现SSH互信: https://www.jianshu.com/p/2456d98aa607
2、简单命令
ssh [email protected] "cd /var/lib; ls; cd "
2.1 使用时注意,双引号必须有。若没加双引号,第二条及之后的命令会在本地执行
2.2 分号是将两条语句间隔开
2.3 单双引的区别:单引号不会解析值,是什么就传什么;双引号会解析值,将解析结果传过去
3、多条命令
ssh [email protected]<< reallssh
cd /var/lib/test
tar -zxvf api.com.tar.gz
......
exit
reallssh
3.1 命令写在 << reallssh(开始亩闷) 至 reallssh(结束) 之间
3.2 reallssh可自己定义为其他形式
3.3 在结束前加上exit退出远程
4、可能遇到的问题
问题:远程登录主机时出现Pseudo-terminal will not be allocated because stdin is not a terminal. 错误
解决方案:字面意思是伪终端将无法分配,因为标准输入不是终端。
所以需要增加-t -t参数来强制伪终端分配,即使标准输入不是终端。
to force pseudo-tty allocation even if stdin isn’t a terminal.
参考样例如下:
ssh -t -t [email protected] -p 22
--------------------------------------------------------------------------------
参考:https://blog.csdn.net/jinking01/article/details/84386769
C. java Linux远程调用win执行UI
java通过winrm4j远程连接win执行命令
在Linux /UNIX/WINDOWS系统中,一般通过远程连接的方式在远端执行脚本命令或者其他,是通过SSH或者Telnet。笔者之前写伍塌过几遍运用JAVA使用SSH或者TELNET连接操作系统执行命令的博客。但这些协议之间存在的差别的。
在LINUX、UNIX系统中一般通过SSH协议来登录、执行命令;
而在Windows操作系统中,由于没有自带SSH协议,一般通过Telnet协议去登录、执行命者贺令;但是Telnet服务默认是不开启的。所以在大规模环境中,操作比较麻烦。另外Telnet协议存在安全问题。
如腔嫌圆果不需要执行命令,而是通过远程桌面的形式来操作windows,可以使用RDP协议,java有一个开源的项目properJavaRDP,可以在web页面或者GUI形式提供实现方案。
D. linux 远程桌面命令
Linux的远程桌面应该分两个部分,首先是Linux客户机连Linux服务器,接着是windows客户机连Linux服务器,还有现在用平板电脑连远程桌面。Linux客户机连Windows服务器其实没啥可说的,rdesktop和termianl
server比起windows自带的“远程桌面连接”。
命令:
1.
nfs,telnet等均可登录,即将远程的那个配置成主机服务器,这边作为客户机登录.
比如:telnet
telnet
192.168.1.123
说明:192.168.1.123就是远程的Ip地址
2.
现在设想登录到远程主机rhostname上,运行gimp
程序,并把它的显示输出到本机的屏幕上,那么需要依次执行以下操作:
1.启动X
服务器
#
xhost
+rhostname
(允许远程rhostname
机使用本机的X
Server)
2.telnet
(或ssh)登录远程主机
#
telnet
rhostname
3.设置DISPLAY
环境变量
指定了一个显示设备,所有的图形程序都将显示到这个设备。
DISPLAY
的格式为:hostname:displaynumber.screennumber。
hostname是本机主机名,或者是它的I
P
地址。一般d
i
s
p
l
a
y
n
u
m
b
e
r
、screennumber
都是0。
#
echo
$SHELL
如果返回的是
/bin/ksh,那么可以用:#
export
DISPLAY=
本机的IP
地址:0.0
如果返回的是
/bin/csh,那么可以用:#
setenv
DISPLAY
本机的IP地址:0.0
如果返回的是
/bin/bash,那么可以用:#
DISPLAY=
本机的IP
地址:0.0
#
export
DISPLAY
4.启动gimp
程序
#
gimp
E. linux中远程访问的命令
可以通过ssh命令连接。
命令使用语法:
1,指定用户:
ssh-lroot192.168.0.11或则
2,如果修改过ssh登录端口的可以:
ssh-p12333192.168.0.11
ssh-lroot-p12333192.168.0.11
连接步骤:
1,打开终端。
2,一般情况下使用ssh +目标地址即可,测试连接本机:
ssh127.0.0.1
3,首次登陆会提示你是否确认连接
输入yes,连接成功。
4,连接其他账户或者计算机需要输入密码才能连接。
F. linux 远程连接命令
Linux最广泛的远程连接命令就是ssh。
如果ssh没有安装就安装 RH系列就yum install openssh
ubuntu系列就是apt-get install openssh
安装完毕后,其他的电脑可以远程访问本机,
本机也可以访问远程电脑。连接远程电脑命令:ssh -l 用户名 主机名