postgres(특정) 사용자를 통해 pgpool(또는 모든 서비스)을 실행하는 방법

postgres(특정) 사용자를 통해 pgpool(또는 모든 서비스)을 실행하는 방법

PostgreSQL용 HA 솔루션을 설정하려고 합니다. 이를 위해 pgpool 서비스를 실행하고 있습니다.

해당 서비스에서는 마스터 노드가 실패할 때마다 다음과 같은 스크립트를 호출합니다.

/etc/pgpool-II-94/failover.sh %d %H'

where %d is my node id and %H is the hostname for the new server. Think of them simply as two parameters.

내 장애 조치 스크립트는 다음과 같습니다.

#!/bin/sh
failed_node=$1
new_master=$2
(
date
echo "Failed node: $failed_node"
set -x
/usr/bin/ssh -T -l postgres $new_master "/usr/pgsql-9.4/bin/repmgr -f /var/lib/pgsql/repmgr/repmgr.conf standby promote 2>/dev/null 1>/dev/null <&-"
exit 0;
) 2>&1 | tee -a /tmp/pgpool_failover.log

여기서 직면한 문제는 이 스크립트가 실행될 때 루트로 실행되므로 다른 서버의 postgres 사용자에 대해 인증할 수 없다는 것입니다.

인증이 통과되도록 pgpool 서비스를 postgres 사용자 자체로 실행하려면 어떻게 해야 합니까?

지금은 다음을 사용하고 있습니다.

systemctl start pgpool-II-94

postgres에서 postgres까지 모든 서버에 비밀번호 없는 SSH가 설정되어 있으므로 이는 문제가 되지 않습니다.

예: postgres user를 실행할 때

-bash-4.2$ /usr/bin/ssh -T -l postgres lbdevsecondary 'echo $HOSTNAME'
lbdevsecondary

하지만 루트 사용자를 통해 실행하면 비밀번호를 묻습니다.

/usr/bin/ssh -T -l postgres lbdevsecondary 'echo $HOSTNAME'
postgres@lbdevsecondary's password:
lbdevsecondary

아니면 먼저 postgres 사용자로 로그인한 다음 스크립트에서 명령을 실행하는 위의 명령문을 다시 작성하는 방법을 알려주십시오.

저는 CentOS 7을 사용하고 있으며 Linux를 처음 사용합니다.

답변1

언제든지 스크립트에서 사용자를 변경할 수 있습니다.

su - postres
  1. SSH 복사 ID

원격 서버에 루트의 SSH 키를 추가합니다.

ssh-copy-id [email protected]

관련 정보