나는 많은 인터넷 검색을 해왔고 내가 하려는 것이 openssh/scp v4.x로는 가능하지 않다고 생각하지만 누군가 창의적인 해결 방법이 있는 경우 여기에 질문하고 싶었습니다.
원격 호스트에서 여러 파일을 로컬 디렉토리로 복사하고 싶지만(전체 디렉토리를 원하지는 않지만 파일 이름은 알고 있으며 정적 이름임) 각 파일에 새 이름을 지정하고 싶습니다. 파일 이름 앞에 컴퓨터 이름을 붙입니다.
또한, 내가 이렇게 하려는 이유는 원격 호스트당 로그인이 1번만 있기 때문입니다(ssh 키 없음)(모든 파일에 비밀번호를 입력할 필요가 없음).
이것이 내가 가진 것입니다:
machine="server1.nyc.ny"
logdir="/var/log/jboss"
logs="garbage.log splunk.log jboss.log"
for BOX in ${machine[@]};do
scp $BOX:$logdir/\{"${logs[0]}","${logs[1]}","${logs[2]}"\} ./
done
이것은 모든 파일을 얻기 위해 원격 호스트에 한 번 로그인하면 작동하지만 결국에는 여러 원격 호스트가 있으므로 로그 파일 이름에 컴퓨터 이름을 추가하려고 합니다. 즉:server1.nyc.ny-garbage.log
파일을 가져오는 동일한 구문이 대상에 대해 작동하지 않습니다. 내 ssh/scp는 v4이므로 ControlPersist 옵션을 사용할 수 없습니다.
창의적인 솔루션이 있나요? 매우 감사합니다!
ps: 여기서는 로그 파일 이름 배열이 필요하지 않지만 일부 사용자가 ssh 키를 가지고 있기 때문에 사용했습니다. 따라서 이러한 배열을 사용하는 중첩 루프가 그들에게 적합합니다. SSH 키가 없는 사용자를 위한 솔루션이 필요하므로 비밀번호 입력량을 최소화해야 합니다.
답변1
mv
뭔가 빠졌을 수도 있지만 복사된 파일의 이름을 바꾸려면 추가 단계가 필요한 것 같습니다 . 그것은 다음과 같습니다:
machine="server1.nyc.ny"
logdir="/var/log/jboss"
logs="garbage.log splunk.log jboss.log"
targets=""
for BOX in ${machine[@]};do
scp $BOX:$logdir/\{"${logs[0]}","${logs[1]}","${logs[2]}"\} ./
for log in ${logs[@]}; do
mv "$log" $BOX_"$log"
done
done