假如在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 可以换成其他命令


 
 

自动输入用户名和密码用于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_rsa2.