2014-03-07 1 views
0

bash 스크립트가 문자열을 표준 입력 스트림에 쓰길 원합니다. git push 명령에 암호를 전달하고 싶습니다. 나는 다음 세 가지 옵션을 시도했는데 그들 중 어느 것도 작동하지 않았다. 자식은 암호를 요구했다.bash 스크립트에서 stdin에 문자열 보내기

#!/bin/bash 

# 0 
git push origin master <<< 'password' 

# 1 
echo 'password' | git push origin master 

# 2 
git push origin master <<EOF 
password 
EOF 
+0

@devnull 중복되지 않습니다. 'git push '는 예제 일뿐입니다. 그리고 위의 방법이 효과가없는 이유를 알고 싶습니다. – Kolyunya

+2

@Kolyunya :'git push '가 단지 예일 뿐이라면, 나쁜 것입니다. 그것은 작동하지 않는 이유는 _git이 표준 input_에 암호를 묻지 않기 때문입니다. 그것은 제어 터미널에서 (실제로 ssh가하는 ssh에서) 요청합니다. 이렇게하면 원격 명령에 데이터를 전달하고 터미널에 암호를 제공 할 수 있습니다. –

답변

3

모든 세 가지 작업은 문자열 password␤을 명령에 전달합니다.

명령은 암호를 표준 입력에서 읽지 않습니다. 그것은 제어 터미널에서 읽습니다. 즉, 특수 파일 /dev/tty을 열고 거기에서 읽습니다.

ssh 전송의 경우 실제로는 암호를 묻는 ssh이며 위의 방법으로 수행합니다 (이 설명은 ssh 또는 ssh 기반 도구의 다른 용도에도 적용됩니다). http 전송의 경우에는 같은 방법으로 처리한다.

이유는 두 가지이다 :

  1. 그래서 당신은 실제 명령의 입력 및/또는 출력을 리디렉션 여전히 키보드에서 암호를 제공하고 단말기에 메시지가 표시 및
  2. 하는 것을 방지 할 수있는 당신이하려는 일은 보안상의 이유로 강력히 권장되지 않습니다.

매번 암호를주지 않고 git remote 명령을 사용하는 방법은 Git push: username, password, how to avoid?을 참조하십시오. http를 고집하는 경우 Is there a way to skip password typing when using https:// on GitHub? 또는 Git http - securely remember credentials의 옵션이 더 안전합니다. gitcredentials(7)도 참조하십시오.

+0

필자는 여전히 내 bash 스크립트에서'/ dev/tty'에 패스워드를 전달할 수 있습니다. – Kolyunya

+0

@Kolyunya : 아니, 할 수 없다 (적어도 쉽게). '/ dev/tty'는 항상 프로세스의 제어 터미널 인 특별한 파일입니다. [expect] (http://expect.nist.gov/)와 같은 프로세스에 사용자 정의 터미널을 제공 할 수있는 일부 응용 프로그램이 있지만 암호없이 자식을 사용하거나 암호를 제공하는 쉬운 방법이 있습니다. –

+0

@Kolyunya : git에서 HTTP 암호를 저장할 수있는 다른 설명에 대한 링크를 추가했습니다. 단일 목적의 ssh 키는 여전히 가장 안전한 옵션입니다. –