클라이언트로부터 일부 데이터를 가져오기 위해 bash 스크립트를 실행하고 있습니다. 스크립트는 다음과 같습니다.
host=2.218.71.67
port=23
login=xxx
passwd=xxx
DATE=date
cmd1=ps
cmd2=dumpmdm
cmd3=sh
cmd4=`cat /proc/meminfo`
cmd5=`cat /proc/slabinfo`
cmd6=`cat /proc/modules`
cmd7=ifconfig
cmd8=`brctl show`
cmd9=`route -n`
cmd10=`cat /proc/net/arp`
cmd11=`cat /proc/net/nf_conntrack`
cmd12=`wlanconfig ath0 list`
cmd13=`wlanconfig ath0 list ap`
cmd14=top
$DATE
(
echo open ${host}
sleep 3
echo ${login}
sleep 1
echo ${passwd}
sleep 1
echo ${cmd1}
sleep 1
echo ${cmd2}
sleep 3
echo ${cmd3}
sleep 1
echo ${cmd4}
sleep 1
echo ${cmd5}
sleep 1
echo ${cmd6}
sleep 1
echo ${cmd7}
sleep 1
echo ${cmd8}
sleep 1
echo ${cmd9}
sleep 1
echo ${cmd10}
sleep 1
echo ${cmd11}
sleep 2
echo ${cmd12}
sleep 1
echo ${cmd13}
sleep 1
echo ${cmd14}
sleep 2
) | telnet
$DATE
스크립트를 실행하면 일부 명령이 텔넷 세션 외부에서 실행되는 것 같습니다.
root@raspberrypi:/etc/my_scripts# ./telnet.sh
cat: /proc/net/nf_conntrack: No such file or directory
./telnet.sh: line 27: wlanconfig: command not found
./telnet.sh: line 28: wlanconfig: command not found
Wed Nov 25 12:57:20 GMT 2015
telnet> Trying 2.218.71.67...
Connected to 2.218.71.67.
Escape character is '^]'.
BCM96348 xDSL Router
Login: ^C
root@raspberrypi:/etc/my_scripts# bash -x telnet.sh
+ host=2.218.71.67
+ port=23
+ login=admin
+ passwd=Sky.2015
+ DATE=date
+ cmd1=ps
+ cmd2=dumpmdm
+ cmd3=sh
++ cat /proc/meminfo
+ cmd4='MemTotal: 445032 kB
MemFree: 25696 kB
MemAvailable: 328996 kB
Buffers: 16848 kB
Cached: 233056 kB
SwapCached: 4 kB
Active: 147000 kB
Inactive: 169248 kB
Active(anon): 21840 kB
Inactive(anon): 44848 kB
Active(file): 125160 kB
Inactive(file): 124400 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 102396 kB
SwapFree: 102392 kB
Dirty: 32 kB
Writeback: 0 kB
AnonPages: 66356 kB
Mapped: 8048 kB
Shmem: 344 kB
Slab: 89504 kB
SReclaimable: 84460 kB
SUnreclaim: 5044 kB
KernelStack: 952 kB
PageTables: 1700 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 324912 kB
Committed_AS: 517536 kB
VmallocTotal: 565248 kB
VmallocUsed: 1076 kB
VmallocChunk: 325400 kB
CmaTotal: 8192 kB
CmaFree: 24 kB'
++ cat /proc/slabinfo
+ cmd5='slabinfo - version: 2.1
# name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
UDPLITEv6 0 0 768 10 2 : tunables 0 0 0 : slabdata 0 0 0
UDPv6 10 10 7
어떤 제안이 있으십니까?
답변1
원격 작업의 경우 nc 또는 Expect를 확인하세요. nc는 더 간단한 작업에 사용되며 더 복잡한 상호 작용을 기대합니다. nc는 훨씬 간단하며 제어 명령이 원격 시스템으로 전송되지 않는다는 것을 확인할 수 있습니다.
보안 관점에서 볼 때, 네트워크를 통해 텔넷을 사용하는 것은 인터넷을 통한 것은 물론이고 콘텐츠가 일반 텍스트로 전송되고 쉽게 캡처될 수 있기 때문에 최선의 방법은 아닙니다.
SSH를 통한 대화 기대를 사용하는 것이 좋습니다.
기사에서 :
http://www.admin-magazine.com/Articles/Automating-with-Expect-Scripts
#!/usr/bin/expect -f
spawn ssh aspen
expect "password: "
send "PASSWORD\r"
expect "$ "
send "ps -ef |grep apache\r"
expect "$ "
send "exit\r"
답변2
정확한 질문에 대답하기 위해 다음 명령은 백틱을 사용합니다.
cmd4=`cat /proc/meminfo`
cmd5=`cat /proc/slabinfo`
cmd6=`cat /proc/modules`
cmd4
따라서 텔넷으로 연결된 호스트가 아니라 스크립트가 실행 중인 호스트에서 할당이 완료될 때 인쇄된 값으로 설정됩니다 . cat /proc/meminfo
당신은 아마 이것을 원할 것입니다 :
cmd4='cat /proc/meminfo'
cmd5='cat /proc/slabinfo'
cmd6='cat /proc/modules'