2012-01-25 36 views
5

Tôi đang cố gắng chạy tập lệnh từ xa (từ tập lệnh bash), nhưng gặp sự cố khi nhận đầu ra để chuyển hướng cục bộ, để phân tích. Chạy tập lệnh không có vấn đề với:gặp sự cố khi chạy tập lệnh bash từ xa, chuyển hướng đầu ra cục bộ

ssh -n -l "$user" "$host" '/home/user/script.sh $params' 

Tuy nhiên, tôi không thể nắm bắt đầu ra của tập lệnh đó. Tôi đã thử các cách sau:

results=$(ssh -n -l "$user" "$host" '/home/user/script.sh $params') 
results=`ssh -n -l "$user" "$host" '/home/user/script.sh $params'` 
ssh -n -l "$user" "$host" '/home/user/script.sh $params' | grep "what I'm looking for" 
ssh -n -l "$user" "$host" '/home/user/script.sh $params' > results_file 

Bất kỳ ý tưởng nào?

+0

http://stackoverflow.com/questions/12048906/capturing-ssh-output-as-variable-in-bash-script –

Trả lời

4
ssh [email protected] "ls -l" >output 

Bạn thậm chí có thể làm những việc như:

ssh [email protected] "cat foo.tar" | tar xvf -- 

Để đơn giản hóa, tạo ra một quán rượu/tin cặp khóa sử dụng ssh-keygen. Sao chép * .pub chìa khóa dẫn đến máy chủ từ xa vào ~/.ssh/authorized_keys, hãy chắc chắn nó chmod'd 600

Sau đó, bạn có thể làm

ssh -i ~/.ssh/yourkey user @ host.com ... etc

Và cũng không yêu cầu mật khẩu. (Nếu cặp khóa của bạn không có mật khẩu) ..

0

Bạn chắc chắn đang làm điều gì sai. Tôi chỉ thử nghiệm nó và nó hoạt động tốt.

[email protected] /tmp $ cat echo.sh 
#!/bin/bash 
echo "Hello WOrld"$1 
[email protected] /tmp $ ssh -n -l shadyabhi 127.0.0.1 '/tmp/echo.sh' foo 
Hello WOrldfoo 
[email protected] /tmp $ ssh -n -l shadyabhi 127.0.0.1 '/tmp/echo.sh' foo > out 
[email protected] /tmp $ cat out 
Hello WOrldfoo 
0

Vâng, để cho ssh -n làm việc ở tất cả, bạn cần phải có những thứ thiết lập để bạn có thể đăng nhập mà không cần mật khẩu hoặc mật khẩu (vì vậy bạn cần một khóa bí mật địa phương hoặc có sẵn với ssh- tác nhân, hoặc không có cụm mật khẩu, và khóa công khai đó cần nằm trong tệp authorized_keys thích hợp trên máy từ xa). Nhưng nếu đó là trường hợp, những gì bạn có nên làm việc tốt (nó đã làm việc tốt cho tôi trên nhiều máy).

Một khả năng kỳ quặc khác là nếu từ xa script.sh cố gắng ghi vào stdin hoặc/dev/tty thay vì stdout/stderr. Trong trường hợp này, nó sẽ không làm việc với ssh -n

+0

_write để stdin_ - bạn đã có nghĩa là "đọc từ" ? – sarnold

0

Nhận ra

ssh -n -l "$user" "$host" '/home/user/script.sh $params' > results_file 

đang làm việc, như mong đợi. Nó chỉ xuất hiện để khóa lên khi đầu ra đã được chuyển hướng (và kịch bản sẽ mất 5-6 phút để xây dựng), và do đó đã không được hiển thị. Cảm ơn tất cả.

0

Tập lệnh của bạn không nhận được bất kỳ thông số nào và có thể mất quá nhiều thời gian để chạy vì điều đó. Ngoài ra, bất cứ điều gì đi ra (trên stdout) có thể được đường ống đến một lệnh tiếp theo hoặc chuyển hướng đến một tập tin như bất kỳ lệnh địa phương khác. Hãy xem xét những điều sau đây:

$ cat ~/bin/ascript.sh 
echo one:$1 two:$2 three:$3 

$ params="squid whale shark" 
$ ssh localhost 'ascript.sh $params' 
one: two: three: 

$ ssh localhost "ascript.sh $params" 
one:squid two:whale three:shark 
Các vấn đề liên quan