[완료]perl 로그생성(or 파일) 관련 질문입니다. (__)

sasimi2001의 이미지

생전 처음 사용하는 언어를 사용할려다 보니깐 처음부터 끝까지 막힙니다.ㅜㅜ
답변받고 게시글 검색해서 알아낸 사이트로 참고할려고 해도 잘 안되네요..
이번에도 염치없이 다시 질문 드립니다.(__)

#1	use Expect;
#2	생략
#3	[qr /[#] /, sub { my $self = shift;
#4		$self->send("ssh -l root $ARGV[0] \"df -i | grep /var\" | awk \'{print \$5\, \$6}\' ; exit\n");
#5		$self->log_file("././log/getinfoserver.log", "w");
#6		$self->log_file();
#7		$self->send("exit\n");
#8		exp_continue; }],

이번에 문제가 되는 부분은 이부분 입니다.(명령어는 테스트용 입니다.)
원격서버의 df -i | grep /var | awk '{print $5, $6}' 정보를 ././log/getinfoserver.log 에 기록 할려고 했던 것입니다.
근데 막상 log 파일을 확인해보면 아래같이 저장이 됩니다.

ssh -l root 111.111.111.111 "df -i | grep /var" | awk '{print $5 ^M, $6}' ; exit
exit
root@111.111.111.111's password:
1% /var
logout
^[[H^[[JConnection to 111.111.111.111 closed.^M

제가 원하던거는 1% /var 이부분만 저장을 하고 싶었던 것입니다.

Q.1 결과적으로 perl 에서 원하는 부분만 추출해서 로그파일로 저장하는 방법이 알고 싶습니다.
Q.2 아니면 위에처럼 로그는 그대로 기록하고 원하는 데이터만 뽑아내는 스크립트를 따로 작성해서 처리하는게 효과적일까요?
Q.3 그리고 로그확인하면 ^M 문자도 같이 생기던데 perl 에서 ^M 안생기게 로그파일로 저장할순 없나요?

amorette의 이미지

목적에 맞게 제공된 Net::SSH::Expect 모듈이 있습니다.
아래와 같이 명령을 수행하고 출력을 얻어 낼 수 있습니다.

        # runs arbitrary commands and print their outputs 
        # (including the remote prompt comming at the end)
        my $ls = $ssh->exec("ls -l /");
        print($ls);

아래와 같이 하나의 셸 커맨드로도 가능합니다.
필요한 경우 .bashrc 에 alias 나 함수를 정의해 두면 됩니다.

ssh -l user localhost df -i | grep /var | awk '{print $5,$6}' >> ./log/getinfoserver_TEST.log

sasimi2001의 이미지

ssh -l user localhost df -i | grep /var | awk '{print $5,$6}' >> ./log/getinfoserver_TEST.log

그런데 로그파일이 원격서버에 저장되는것이 아니라 펄스크립트를 실행하는 로컬서버쪽에 저장이 되어야 해서요.^^

아뭏든 Net::SSH::Expect 이거 보고 좀더 생각해 봐야겠네요.ㅎㅎ

amorette의 이미지

>> 로 리다이랙트 되는 부분은 ssh 명령어의 인자로 받아지는게 아니므로,
로컬에 기록됩니다.

sasimi2001의 이미지

로그저장 면에서는 제가 꼭 필요한 기능이 있긴 한데

#!/usr/bin/perl

use Net::SSH::Expect;

my $ssh = Net::SSH::Expect->new (
host => "111.111.111.111",
password=> 'abcd1234',
user => 'root',
raw_pty => 1
);

$ssh->login();

my $who = $ssh->exec("passwd sasimi2k");

=> 이렇게 실행하였을때 기존 expect 문처럼 출력된 스티링을 확인해서 일정 스트링을 넣어주는 기능은 어떻게 구현 하나요?

[qr /Are you sure you want to continue connecting /, sub { my $self = shift;
$self->send("yes\n");

이런 것 처럼요

알려주신 주소 하단부분에 그와 관련된 예제가 나와있긴 한데 잘 안되서요..

amorette의 이미지

간단히 아래와 같이 할 수 있습니다.

my $ssh = Net::SSH::Expect->new( timeout => 10 ); # 기본 타임아웃 설정
 
$ssh->waitfor('Are you sure you want to continue connecting', 10)
   and do {
      $ssh->send("yes\n");
 
   };

Expect 모듈에서는 expect 메쏘드 호출에 여러개의 매치와 callback 함수를 등록할 수 있지만,
Net::SSH::Expect 에서는 제공하지 않으므로 필요한 경우 직접 구현해야 할 것 같습니다.

또는 Net::SSH::Expect 모듈이 Expect 를 내부적으로 사용하기 때문에 아래와 같이 할 수도 있습니다.

$ssh->get_expect->expect( ... );

Quote:
It uses Expect.pm module to interact with the SSH server. A get_expect() method is provided so you can obtain the internal Expect object connected to the SSH server. Use this only if you have some special need that you can't do with the exec() method.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.