특정 디렉토리에 SSH로 연결할 수 있습니까? 서버에 SSH를 설치하고

나는 매일 수많은 다른 서버에 SSH를 설치하고 일부는 웹 사이트마다 다른 파일 시스템 구조를 가지고 있습니다. 서버를 변경할 때마다 내가 원하는 파일을 얻을 수있는 곳을 찾아야합니다 ~.

패브릭 파일을 사용하여 모든 작업 (git으로 푸시, git에서 자동 SSH를 서버에 가져 오기, 웹 응용 프로그램 다시 시작, 종속성 변경 등)을 자동화하기 위해 원하는 것을 말할 수 없는지 궁금했습니다. 올바른 디렉토리에 SSH로 연결하여 fab ssh올바른 위치에서 바로 정상적인 SSH 세션을 실행 하고 즉시 작업을 시작할 수 있습니다.

이것은 직물에 관한 것이 아닙니다. 무시하십시오. 패브릭은 일련의 명령을 실행 중입니다. 내 주장은 ssh명령에 있습니다. 이것이 Fabric에 실행을 지시하는 내용입니다.

그래서 어떻게 얻을 수 sshcd로그인의 특정 디렉토리에?

참고 : 이것은 서버 또는 사용자 전체의 것이 될 수 없습니다 . 일부 서버에는 한 명의 사용자로 여러 웹 사이트가 있으므로 무언가를 고수하는 것은 효과 ~/.bashrc가 없습니다.



답변

글쎄, 나는 로그인 할 때 무언가를 실행할 수 있다는 것을 알고 있었지만 실행 후 바로 종료 될 것을 알았습니다. 내가 기억하는 것은 원격 서버에서 원하는만큼 실행할 수 있다는 것입니다. 명령을 함께 연결할 수 있습니다!

ssh user@server -t "cd /websites/website ; /bin/bash"

이제 패브릭에 그렇게하도록 지시 할 수 있습니다. 단순한.


패브릭과 관련이 없다고 말했지만 위의 내용을 기반으로 패브릭 스크립트의 새로운 부분도 있습니다.

def ssh():
    ''' SSH into the remote server at the correct directory '''
    local('ssh -t -p%(port)s %(server)s "cd %(remote_dir)s ; /bin/bash"' % {
        'server': server_host,
        'port': server_port,
        'remote_dir': remote_dir,
    })

변수 ( server_host, server_portremote_dir)가 사이트마다 변경 되도록 동일한 스크립트를 심볼릭 링크합니다 .

Fabric은 아웃 바운드 연결을 처리 할 수 ​​있으므로 다음과 같이하면됩니다.

def ssh():
    ''' SSH into the remote server at the correct directory '''
    run('cd %s ; /bin/bash' % remote_dir)

이것은 작동하지만 출력에는 Fabric의 문자열이 앞에 붙습니다. 이것은 80 자 이상으로 프롬프트를 만들었고, 많은 해상도를 얻었지만 너무 나았습니다. 🙂