求助,远程登录linux后,怎么自动python 执行linux命令一些命令

Linux系统技术交流QQ群(915246)验证问题答案:刘遄
我一直很好奇,在启动
系统并登录的过程中到底发生了什么事情。按下开机键或启动一个虚拟机,你就启动了一系列事件,之后会进入到一个功能完备的系统中,有时,这个过程不到一分钟。当你注销或者关机时,也是这样。
我一直很好奇,在启动 Linux 系统并登录的过程中到底发生了什么事情。按下开机键或启动一个虚拟机,你就启动了一系列事件,之后会进入到一个功能完备的系统中,有时,这个过程不到一分钟。当你注销或者关机时,也是这样。
更有意思的是,在系统启动以及用户登录或注销时,还可以让系统执行特定的操作。
本文,我们将探讨一下在 Linux 操作系统中实现这些目标的传统方法。
注意:我们假定使用的是 Bash 作为登录及注销的主 Shell。如果你使用的是其他 Shell,那么有些方法可能会无效。如果有其他的疑问,请参考对应的 Shell 文档。
在启动时执行 Linux 脚本
有两种传统的方法可以实现在启动时执行命令或脚本:
方法 #1 - 使用 cron 任务
除了常用格式(分 / 时 / 日 / 月 / 周)外,cron 调度器还支持 @reboot 指令。这个指令后面的参数是脚本(启动时要执行的那个脚本)的绝对路径。然而,这种方法需要注意两点:
a) cron 守护进程必须处于运行状态(通常情况下都会运行),同时
b) 脚本或 crontab 文件必须包含需要的环境变量(如果有的话,参考 StackOverflow 获取更多详细内容)。
方法 #2 - 使用 /etc/rc.d/rc.local
这个方法对于 systemd-based 发行版 Linux 同样有效。不过,使用这个方法,需要授予/etc/rc.d/rc.local文件执行权限:
# chmod +x /etc/rc.d/rc.local
然后在这个文件底部添加脚本。
下图说明如何分别使用 cron 任务和 rc.local 运行两个示例脚本(/etc/rc.d/rc.local/home/gacanepa/script1.sh 和/home/gacanepa/script2.sh)。
script1.sh:
#!/bin/bash
DATE=$(date +'%F %H:%M:%S')
DIR=/home/gacanepa
echo "Current date and time: $DATE" & $DIR/file1.txt
script2.sh:
#!/bin/bash
DIR=/home/gacanepa
echo "$SITE rocks... add us to your bookmarks." & $DIR/file2.txt
*启动时执行 Linux 脚本 *
记住,一定要提前给两个示例脚本授予执行权限:
$ chmod +x /home/gacanepa/script1.sh
$ chmod +x /home/gacanepa/script2.sh
在登录或注销时执行 Linux 脚本
要在登录或注销时执行脚本,分别需要使用~.bash_profile和~.bash_profile文件。多数情况下,后者需要手动创建。在每个文件的底部,添加调用脚本代码,如前面例中所示,就可以实现这个功能。
本文主要介绍如何在启动、登录以及注销系统时执行脚本。
作者: 译者: 校对:
原创编译, 荣誉推出
原文来自:
本文地址:编辑员:张雄,审核员:逄增宝
为您推荐一些与本文相关的文章:
进阶课程目录
第24章 使用Xen与Kvm部署虚拟化服务环境。(即将公布)
Linux技术交流QQ群
向每个正在奋斗的Linuxer致敬.
Linux技术交流群A:560843
Linux技术交流群B:340829
Linux技术交流群C:463590
Linux技术交流群D:915246
Linux技术交流群E:1663106
Linux技术交流群F:1653851
Linux技术交流群G:2632018
Linux技术交流群H:2636170
Linux技术交流群I:2650582
全国Linux技术交流群(总):
8月0 篇文章9月0 篇文章10月0 篇文章11月0 篇文章12月0 篇文章
1月0 篇文章12月0 篇文章博客访问: 1387068
博文数量: 522
博客积分: 10206
博客等级: 上将
技术积分: 5614
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
有一个远程的busybox机器只能支持telnet访问,而我需要在另外一个机器上访问该机器自动提取某些数据,以下是方法方法一,用第三方expect包,在CentOS上调试通过以下命令都在本地机器上执行首先安装expect#yum install expect#cat myjob1.sh#!/usr/bin/expect -fspawn telnet xxx.xxx.xxx.xxx&&&&&&&#远程机器IPexpect -re "login"send "yourusername\n"&&&&&&&&&&#登录远程机器的用户名expect -re "Password"send "yourpw\n"&&&&&&&&&&#登录远程机器的密码expect -re "#"send "date\n"&&&&&&&&&&#登录后要在远程机器上执行的本地命令,这是只是查询远程机器的当地时间,你可以换成其他本地命令或脚本expect -re "#"send "exit\n"&&&&&&&&&&#完成后退出interact方法二, 用内部命令,不用第三方包,在CentOS上调试通过# cat myjob1.sh#! /bin/bash(echo 'yourusername'&&&&&&&&&&#登录远程机器的用户名sleep 1echo 'yourpw‘&&&&&&&&&&#登录远程机器的密码sleep 1echo 'date'&&&&&&&&&&#登录后要在远程机器上执行的本地命令sleep 1) | telnet xxx.xxx.xxx.xxx要定时执行的话只需要把以上的脚本加到crontab就行(以上为博主原创并测试通过)
阅读(7477) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。实现远程登录的命令
ssh、telnet、rlogin
(1)ssh命令
ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器。ssh命令用于远程登录上Linux主机。
常用格式:ssh [-l login_name] [-p port] [user@]hostname更详细的可以用ssh -h查看。
ssh(选项)(参数)
-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址;
-C:请求压缩所有数据;
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。
远程主机:指定要连接的远程ssh服务器;
指令:要在远程ssh服务器上执行的指令。
不指定用户:
ssh 192.168.0.11
指定用户:
ssh -l root 192.168.0.11
ssh root@192.168.0.11
如果修改过ssh登录端口的可以:
ssh -p 8.0.11
ssh -l root -p 0.230.114
ssh -p 12333 root@216.230.230.114
另外修改配置文件/etc/ssh/sshd_config,可以改ssh登录端口和禁止root登录。改端口可以防止被端口扫描。
编辑配置文件:
vim /etc/ssh/sshd_config
找到#Port 22,去掉注释,修改成一个五位的端口:
Port 12333
找到#PermitRootLogin yes,去掉注释,修改为:
PermitRootLogin no
重启sshd服务:
service sshd restart
当你使用ssh从本机登录到远程主机时,你可能希望切换到本地做一些操作,然后再重新回到远程主机。这个时候,你不需要中断ssh连接,只需要按照如下步骤操作即可:
要临时回到本地主机,输入退出符号:&~&与&Control-Z&组合。当你输入&~&你不会立即在屏幕上看到,当你按下&Control-Z&并且按回车之后才一起显示。
(2)telnet命令
telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。但是,telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。telnet命令还可做别的用途,比如确定远程服务的状态,确定远程服务器的某个端口是否能访问。
命令格式:
telnet[参数][主机]
命令功能:
执行telnet指令开启终端机阶段作业,并登入远端主机。
命令参数:
-8 允许使用8位字符资料,包括输入与输出。
-a 尝试自动登入远端系统。
-b&主机别名& 使用别名指定远端主机名称。
-c 不读取用户专属目录里的.telnetrc文件。
-d 启动排错模式。
-e&脱离字符& 设置脱离字符。
-E 滤除脱离字符。
-f 此参数的效果和指定"-F"参数相同。
-F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
-k&域名& 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
-K 不自动登入远端主机。
-l&用户名称& 指定要登入远端主机的用户名称。
-L 允许输出8位字符资料。
-n&记录文件& 指定文件记录相关信息。
-r 使用类似rlogin指令的用户界面。
-S&服务类型& 设置telnet连线所需的IP TOS信息。
-x 假设主机有支持数据加密的功能,就使用它。
-X&认证形态& 关闭指定的认证形态。
正常telnet
telnet 192.168.120.204
[root@andy ~]# telnet 192.168.120.204
Trying 192.168.120.204...
Connected to 192.168.120.204 (192.168.120.204).
Escape character is '^]'.
localhost (Linux release 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:44 EST 2012) (1)
login: root
Login incorrect
说明:一般情况下不允许root从远程登录,可以先用普通账号登录,然后再用su&-切到root用户。
(3)rlogin命令
rlogin命令用于从当前终端登录到远程Linux主机。
格式:rlogin&RemoteHost&[&Character&] [&] [&User&] [&|&] [&realm]语法:
rlogin(选项)(参数)
-8:允许输入8位字符数据;
-e脱离字符&:设置脱离字符;
-E:滤除脱离字符;
-l用户名称&:指定要登入远端主机的用户名称;
-L:使用litout模式进行远端登入阶段操作。
远程主机:指定要登录的远程主机(ip地址或者域名)。
显示rlogin服务是否开启
# chkconfig --list //检测rlogin服务是否开启
开启rlogin服务
# chkconfig rlogin on //开启rlogin服务
登陆远程主机
# rlogin 192.168.1.88
Password:
Password:
Login incorrect
Login:root
Login incorrect
指定用户名登陆远程主机
# rlogin 192.168.1.88 -l hnlinux
Last login:Mon May 28 15:30:25 from 192.168.1.88
执行远程主机命令的命令
(1)rexec命令rexec命令用于在指定的远程Linux系统主机上执行命令,向远程rexec服务器发出执行命令的请求。语法:
rexec(选项)(参数)
-a:表示远程命令的标准错误与标准输出相同,不支持发送任意信号到远程进程;
-l&用户名&:指定连接远程rexec服务器的用户名;
-p&密码&:指定连接远程rexec服务器的密码;
-n:明确地提示输入用户名和密码。
远程主机:指定远程主机(ip地址或主机名); 命令:指定需要在远程主机上执行的命令。
要在一个远程主机上执行date命令,输入:
rexec host1 date
(2)rsh命令和remsh&命令
rsh是"remote shell"(远程 shell)的缩写。&该命令在指定的远程主机上启动一个shell并执行用户在rsh命令行中指定的命令。(执行远程主机上指定的命令或登录至远程主机。)如果用户没有给出要执行的命令,rsh就用rlogin命令使用户登录到远程机上。&remsh&命令使您可以在远程系统上执行命令,而无需登录到该系统。rsh命令的一般格式是:
rsh [-Kdnx] [-k realm] [-l username] host [command]
一般常用的格式是:
rsh host [command]
command可以是从shell提示符下键人的任何Linux命令。&rsh命令中各选项的含义如下:&
-K 关闭所有的Kerbero确认。该选项只在与使用Kerbero确认的主机连接时才使用。
-d 打开与远程主机进行通信的TCP sockets的socket调试。要了解更多的信息,请查阅setsockopt的联机帮助。
-k 请求rsh获得在指定区域内的远程主机的Kerberos许可,而不是获得由krb_relmofhost(3)确定的远程主机区域内的远程主机的Kerberos许可。
-l 缺省情况下,远程用户名与本地用户名相同。本选项允许指定远程用户名,如果指定了远程用户名,则使用Kerberos 确认,与在rlogin命令中一样。
-n 重定向来自特殊设备/dev/null的输入。
-x 为传送的所有数据打开DES加密。这会影响响应时间和CPU利用率,但是可以提高安全性。
Linux把标准输入放入rsh命令中, 并把它拷贝到要远程执行的命令的标准输入中。它把远程命令的标准输出拷贝到rsh的标准输出中。它还把远程标准错误拷贝到本地标准错误文件中。任何退出、中止和中断信号都被送到远程命令中。当远程命令终止了,rsh也就终止了。
阅读(...) 评论()用户名:李振良OK
文章数:174
评论数:346
访问量:401782
注册日期:
阅读量:1297
阅读量:3317
阅读量:439348
阅读量:1126129
51CTO推荐博文
Linux下实现免交互登陆一般有两种:1. SSH无密码认证方式& & 客户端使用ssh-keygen生成密钥对,将公钥复制到服务端(authorized_keys),SSH提供公钥登陆,当SSH访问服务端时,服务端先在本机寻找客户端的公钥,然后把客户端发来的公钥进行比较,如果一致,则用公钥加密给客户端,客户端再用私钥进行解密,实现加密所有传输的数据。1&.在客户机上创建密钥对# ssh-keygen -t rsa #一路回车2&.登陆ssh服务器,创建.ssh目录及设置权限#&mkdir&/root/.ssh
#&chmod&700&/root/.ssh3&.将公钥上传到服务器并重命名为authorized.keys#&scp&/root/.ssh/id_rsa.pub&root@服务端IP:/root/.ssh/authorized_keys&#id_rsa.pub可以追加多个客户端的公钥4&.设置ssh服务器#&vi&/etc/ssh/sshd_config&
RSAAuthentication&yes&&&&&&&&&&&#这三行取消注释,开启密钥对验证
PubkeyAuthentication&yes
AuthorizedKeysFile&.ssh/authorized_keys
PasswordAuthentication&no&&&&#关闭密码验证
#&service&sshd&restart5&.免交互登陆测试,并查看远程主机磁盘分区#&ssh&root@服务端IP&'df&-h'2. 利用expect工具自动实现交互任务& &Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。& &CentOS安装:yum install expect& &Ubuntu安装:sudo apt-get install expect1&.免交互登陆,查看远程主机磁盘分区#!/usr/bin/expect
set&ip&192.168.1.156
set&pass&&&&&
set&timeout&30
spawn&ssh&root@$ip
&&&&&&&&"(yes/no)"&{send&"yes\r";&exp_continue}
&&&&&&&&"password:"&{send&"$pass\r"}
expect&"root@*"&&{send&"df&-h\r"}
expect&"root@*"&&{send&"exit\r"}
expect&eof
#&interact2&.在Shell脚本中嵌入Expect语法&方法1:使用EOF,将内容段让expect执行#!/bin/bash
pass='123'
ip='192.168.1.154'
/usr/bin/expect&&&&EOF
set&timeout&30
spawn&ssh&$user@$ip&&&
&&&&&&&&"(yes/no)"&{send&"yes\r";&exp_continue}
&&&&&&&&"password:"&{send&"$pass\r"}
expect&"root@*"&&{send&"df&-h\r"}
expect&"root@*"&&{send&"exit\r"}
expect&eof&
EOF#!/bin/bash
pass='123'
ip='192.168.1.154'
expect&-c&"
&&&&spawn&ssh&$user@$ip
&&&&expect&{
&&&&&&&&\"(yes/no)\"&{send&\"yes\r\";&exp_continue}
&&&&&&&&\"password:\"&{send&\"$pass\r\";&exp_continue}
&&&&&&&&\"root@*\"&{send&\"df&-h\r&exit\r\";&exp_continue}
&&&&}"方法2:将expect脚本独立出来#&vi&login.exp&&&&&&#免交互登陆脚本
#!/usr/bin/expect&
set&ipaddress&[lindex&$argv&0]
set&username&[lindex&$argv&1]
set&password&[lindex&$argv&2]
if&{&$argc&!=&3&}&{
puts&"Usage:&expect&login.exp&ipaddress&username&password"
set&timeout&30
spawn&ssh&$username@$ipaddress
&&&&&&&&"(yes/no)"&{send&"yes\r";&exp_continue}
&&&&&&&&"password:"&{send&"$password\r"}
expect&"$username@*"&&{send&"df&-h\r"}
expect&"$username@*"&&{send&"exit\r"}
expect&eof#&vi&user_info&&&&&#用户信息文件
192.168.1.156&&&user&&&&user
192.168.1.154&&&root&&&&
#&vi&expect.sh&&&&&#读取用户信息并赋值到变量
#!/bin/bash
for&ip&in&`awk&'{print&$1}'&user_info`
&&&&user=`awk&-v&I="$ip"&'{if(I==$1)print&$2}'&user_info`
&&&&pass=`awk&-v&I="$ip"&'{if(I==$1)print&$3}'&user_info`
&&&&expect&login.exp&$ip&$user&$pass
done参数说明:set:可以设置超时,也可以设置变量timeout:expect超时等待时间,默认10Sspawn:执行一个命令expect "":匹配输出的内容exp_continue:继续执行下面匹配\r:可以理解为回车$argc:统计位置参数数量[lindex $argv 0]:脚本后第一个参数,类似于shell中$1,以此类推puts:打印字符串,类似于echoawk -v I="$ip":赋值变量expect{...}:输入多行记录其他参数说明:timeout -1:永不超时退出log_file /var/log/expect.log:记录交互信息,一般crontab时使用interact:交互后不退出远程终端,如果加要把expect "root@*" {send "exit\r"}注释掉,如果不加,就直接退出将spawn ssh root@$ip换成spawn ssh -o StrictHostKeyChecking=no root@ip既不会再提示是否将服务器计算机密钥加入本地known_hosts本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
10:11:19 17:04:01 17:24:26 21:35:04 16:09:40 19:51:57

我要回帖

更多关于 linux shell 执行命令 的文章

 

随机推荐