자식 리모컨을 해결하는 방법?


0

다음 구성을 가정하십시오.

$ cat ~/.ssh/config
Host foo
HostName git.foo.com
IdentityFile ~/.ssh/foo
Port 9000
User git
$ cd WORKING_COPY
$ git remote -v
origin  foo:bla.git (fetch)
origin  foo:bla.git (push)

WORKING_COPY폴더 내 에서 origin원격 의 실제 URL을 확인하기 위해 어떤 git 부속 명령을 사용할 수 git+ssh://git@git.foo.com:9000/bla.git있습니까?

답변:


1

지금까지 힘내에 관한 한, 그것은 이다 실제 URL은. git remote -v그리고 git remote get-url단지 망할 놈의 고유 한 구성 (즉, 정의 대체 수행 url.*.insteadOf설정). 나머지는 SSH 클라이언트로 직접 전달됩니다.

따라서 ~/.ssh/config자신을 파싱 하거나 ssh프로그램에 질문해야 합니다. 최신 OpenSSH 버전에는 다음과 같은 -G옵션이 있습니다.

$ ssh -G foo | egrep "^(user|hostname|port) "
user git
hostname git.foo.com
port 9000

$ ssh -G foo | perl -e 'while (<>) { /^(\S+) (.*)$/ and $c{$1} = $2; }
                        for ($c{hostname}) { /:/ and s/.*/[$&]/; }
                        print "ssh://$c{user}\@$c{hostname}:$c{port}/\n";'
ssh://git@git.foo.com:9000/

( git+ssh://ssh+git://접두사는 git에서 제거되도록 계획되어 있습니다.)

직접 옵션 이없는 구 버전의 경우 ; ProxyCommand 옵션 (Mosh의 기능)이나 서버에 실제로 연결 하는 것이 중요하지 않은 경우 LocalCommand를 남용 할 수 있습니다 .

ssh -o ProxyCommand=">&2; echo %h %p" foo

고맙지 만 리모컨이 ssh임을 어떻게 감지합니까? foo:유효한 URL 체계 일 수 있습니다. 어떻게이 계획을 나열 할 수 있습니다 방법 / 현재 설치가 프로토콜을 git이해하고 (이 있다면 그래서 나는 ssh를 가정 해 수 없습니다 그 목록에서)?
jcayzac

1
git ... url 구문 분석은 약간 이상합니다. 가장 간단한 옵션은 :/(거의 모든 URL) 또는 ::(외부 git-remote-foo 처리기) 가 바로 뒤에 오는 경우 URL 체계 라고 가정하고 그렇지 않으면 scp 스타일 주소를 가정합니다.
grawity

감사! 다음 며칠 동안 아무도 더 나은 답변을 찾지 못하면 나는 이것을 받아 들일 것입니다.
jcayzac

아 잠깐만, host:/path/to/repo실제로 유효합니다. 당신은 서버가 이름을 가지고 있다면 사실, http다음도 http://foo/bar두 가지로 해석 될 수있다. 따라서 URL에 URL이 ://있거나 특정 체계를 허용 목록에 추가 한다고 가정 하십시오 (목록에 대한 git의 소스 코드 검색).
grawity

경우 GIT_SSH_COMMAND="ssh -G >${PWD}/foo" git ls-remote origin xxx0이 아닌 리턴 코드를 반환 하고 파일이 foo존재하고 원격 사용 SSH 모든 정보는 해당 파일에서 사용할 수 있습니다. 그것은 제로 리턴 코드를 반환하면, 원격 ssh를을 포함하지 않고 도달 한 (그리고 어쩌면 사용하지 않는 한 해결하기 위해 아무 것도 없다 /etc/hosts.
jcayzac
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.