远程调用shell的方法

来源:互联网 发布:淘宝apple store真假 编辑:程序博客网 时间:2024/05/16 09:15

假如在A机器上要调用C机器上的shell(程序),如何处理。主要涉及到交互等

 

直接telnet是可以的,但是如何写到shell脚本里呢

 

cat conf.txt | telnet 这样不行

 

上网查询了下,还没有做测试,先放到这里

 

1.

 

作者:meteor06  出处:Unix爱好者家园unix-cd.com  
 
( sleep 2
echo "user";
sleep 2
echo "passwd"
sleep 4
echo "ls";
sleep 20
echo "exit";
) | telnet ip


这个shell里面user ,passwd ,ip 都要用实际的参数来替换
ls 可以换成其他命令  
 
 

文章出处:飞诺网(www.firnow.com):http://dev.firnow.com/course/3_program/shell/shelljs/200862/119918.html

 

2.

 

http://www.chinaunix.net 作者:panlm  发表于:2005-04-11 12:36:36【发表评论】【查看原文】【Shell讨论区】【关闭】


自动输入用户名和密码用于tenlnet的shell, 哈哈

用linux的朋友且经常用配置路由器的可有福了. :)

今天刚刚完成, 大家多提意见 :)

#===========autotelnet.sh==============
#!/bin/bash
if (( $# != 1 ))
then
  echo " usage: $0 address "
  exit 1
fi
ip=$1
inp1=`cat param |grep "$ip" |awk '{ print $2 }'`
inp2=`cat param |grep "$ip" |awk '{ print $3 }'`
inp3=`cat param |grep "$ip" |awk '{ print $4 }'`

inputfile=in
outputfile=out
rm -fr $inputfile
rm -fr $outputfile
mknod $inputfile p
touch $outputfile

#file description 7 for out and 8 for in
exec 7<>$outputfile
exec 8<>$inputfile

telnet $ip <&8 >&7 &

sleep 1; echo $inp1 >> $inputfile
sleep 1; echo $inp2 >> $inputfile
sleep 1; echo $inp3 >> $inputfile

tail -f $outputfile &

while true
do
  read str
  if [[ $str = "quit" || $str = "exit" ]]
  then echo $str >> $inputfile ; exit
  else echo $str >> $inputfile
  fi
done
#==================================


参数文件, 输入在出现正常提示符之前需要输入的所有内容, 用空格分开, 以ip地址或者hostname开头
#=====param============
localhost root password

#=====================

这个例子的原理就是
建立一个管道文件,$inputfile
建立一个临时文件,$outputfile
分别作为 telnet 程序的输入输出。

然后以后再向 $input 中写的东西
就会传递个 telnet 的标准输入。

mknod filename p 
用于创建管道文件。

tail -f outputfile
用于不断打印telnet 的输出。

-f 得选项很有用,一个文件
变长了之后,他会自动把文件增加的内容打印出来。
用来调试程序的日志文件输出很好用。

exec 7<>filename

把file descriptor 7 ,做为打开文件 filename 。

以后的子进程都会继承父进程所打开的FD

所以 telnet <&8 >&7 才起作用。

关于 File descriptor 还有输入输出重定向,
在刚刚的网中人和 admirer精华贴中说得非常好。 

http://www.chinaunix.net/forum/viewtopic.php?t=191375


叹服于 Unix 中 file, pipe, IO redirect 的设计思想。

简单,易懂,强大。

 

3

 

服务器端:
apt-get install ssh

编辑/etc/ssh/sshd_config
#ServerKeyBits 768 ← 找到这一行,将行首的“#”去掉,并将768改为1024

ServerKeyBits 1024 ← 修改后变为此状态,将ServerKey强度改为1024比特

PermitRootLogin yes  ← 找到这一行,将行首的“#”去掉,并将yes改为no

PermitRootLogin no  ← 修改后变为此状态,不允许用root进行登录

PermitEmptyPasswords no  ← 找到此行“#”删除,不允许空密码登录

PermitEmptyPasswords no  ← 修改后变为此状态,禁止空密码进行登录

#PasswordAuthentication yes ← 找到这一行,将yes改为no

PasswordAuthentication no ← 修改后变为此状态,不允许密码方式的登录

以普通用户的身份建立公钥和私钥:
ssh-keygen -t rsa
然后要求你确认钥匙的文件名(用默认的就好了);输入口令;再次输入口令。

在~/.ssh/下会生成公钥id_rsa.pub和私钥id_rsa

更改公钥文件名:mv id_rsa.pub authorized_keys
设置文件属性:chmod 400 authorized_keys

重启ssh服务:/etc/init.d/ssh restart

将私钥id_rsa移动到客户机端

客户机端:
apt-get install ssh
mkdir ~/.ssh/
chown user:user ~/.ssh/
chmod 700 ~/.ssh/
将私钥文件移动到~/.ssh/中
chown root:root ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa

原创粉丝点击