여러 서버에서 SSH를 통해 로그 파일을 grep하는 방법은 무엇입니까?

여러 서버에서 SSH를 통해 로그 파일을 grep하는 방법은 무엇입니까?

가끔 로그 파일에서 특정 로그 콘텐츠(예: API 호출)를 찾아야 할 때가 있는데, 해당 로그 파일은 여러 Linux 서버에 존재합니다.

SSH를 사용하여 모든 서버에 로그인하고 grep을 사용하여 로그를 검색해야 합니다. 지금 당장은 이 작업을 자동으로 완료하는 셸을 작성할 계획입니다. 하지만 쉘에 "ssh"를 넣으려고 할 때 실행하면 항상 비밀번호 입력이 필요하고 화면에 메시지가 표시됩니다.

비밀번호 입력에 대한 경고 메시지가 없는지 확인하는 방법이 있나요? 아니면 여러 서버에서 "grep" 사용을 지원하는 방법이 있나요?

프로덕션 서버에서 이 변경을 수행할 수 있으므로 SSH 키 인증을 사용할 수 없습니다.

왜냐하면 웹 페이지(예: JSP, PHP.)에 결과를 제공하고 백엔드에서 Java로 해당 셸을 실행할 계획이기 때문입니다.

답변1

공개 키 인증이나 Kerberos 인증의 대안은 마스터 연결을 사용하는 것입니다. 이는 일반적으로 ~/.ssh/config클라이언트의 파일에 다음을 추가하여 수행됩니다.

Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

그 이후에는 이미 서버에 연결되어 있는 경우 다른 세션을 열면 비밀번호를 묻지 않고 첫 번째 연결을 다시 사용하게 됩니다. 따라서 모든 서버에 대한 연결을 계속 열어두면 스크립트에 비밀번호 입력이 필요하지 않습니다.

ControlMaster, ControlPath, ControlPersist옵션을 참조하거나 의 , 옵션을 참조 ssh_config(5)하십시오 .-O-Sssh(1)

답변2

이 질문에 대답하기에는 정말 늦었지만 다음을 사용할 수 있습니다.구조. 다음과 같이 fabfile.py를 작성할 수 있습니다.

from fabric.api import *

env.roledefs = {
    'dev':  ['dev_a', 'dev_b'],
    'pro':  ['pro_a', 'pro_b', 'pro_c', 'pro_d']
} 

env.user = 'foobar'
env.shell = 'rbash -l -c'
env.disable_known_hosts = True
logfile = '/path/to/logfile.txt'

def g(pattern):
    with settings(warn_only=True):
        run('grep -H --color "{0}" {1}'.format(pattern, logfile))

위의 스크립트는 다음과 같은 새로운 명령을 정의합니다.g패턴을 입력으로 받아들이면 다음을 사용하여 스크립트를 실행할 수 있습니다.

fab -R dev -p my_pwd g:"some pattern"

역할별로 정의된 호스트에서 "일부 패턴"을 grep하려면개발자.

답변3

공개 키 인증을 사용할 수 없으므로 로그인 프로세스를 반복하지 않으려면 첫 번째 답변에 설명된 방법을 사용하는 것이 더 나을 것입니다. 하지만 여러 서버에 연결하기 위한 스크립트를 만드는 것은 비교적 간단합니다.

#!/usr/bin/env bash

hosts=(ipaddr1 ipaddr2 ipaddr3) # or host names
user=username                   # your user on host
log=/tmp/mylog                  # result of grepping

for host in ${hosts[@]}; do
    echo "== $host ==" >> $log
    ssh -l $user $host "grep some_pattern /path/to/logfile 2>&1" >> $log
done
less $log                       # view result

나는 이것을 테스트하지 않았지만 작동할 것입니다. 이것이 필요한 것이 아닌지 알려주십시오.

답변4

그냥 grep4j를 사용하세요(https://code.google.com/p/grep4j/)를 백엔드에 추가하고 jsp/php에 결과를 표시합니다.

관련 정보