Mac OS X에서 sshd 포트를 변경하는 방법은 무엇입니까?


53

sshdMac 서버에서 사용 하는 포트를 변경하고 싶습니다 . 예를 들어, 포트 22에서 포트 32로 가정 해 봅시다.

편집 /etc/sshd_config이 작동하지 않는 것 같습니다. 누구든지 그것을 바꾸는 방법을 알고 있습니까? 모든 OSX 버전과 호환되는 (또는 가능한 한 많은) 방법을 선호합니다.


또한 /usr/libexec/sshd-keygen-wrapper(아래 plists에 표시) plist 자체에 지정된 것과 다른 SSH를 시작할 수 있습니다. 당신이 그것을 고양이 경우, 항상 시작됩니다 /usr/sbin/sshd.

답변:


61

이전의 모든 답변은 (Google이 제안한대로) 작동하지만 더럽고 우아 합니다.

Mac OS X에서 실행 된 처리 된 서비스의 청취 포트를 변경하는 올바른 방법은 전용 키를 변경하는 것입니다. ssh.plist

따라서 솔루션은 서비스 이름 대신 포트 번호를 사용하는 것만 큼 간단합니다.

내 편집에서 발췌 /System/Library/LaunchDaemons/ssh.plist:

    <key>Sockets</key>
    <dict>
            <key>Listeners</key>
            <dict>
                    <key>SockServiceName</key>
                    <string>22022</string>
                    <key>SockFamily</key>
                    <string>IPv4</string>
                    <key>Bonjour</key>
                    <array>
                            <string>22022</string>
                    </array>
            </dict>
    </dict>

참고 : El Capitan, Sierra 및 이후 버전에서도이 파일을 편집하려면 SIP (System Integrity Protection)를 비활성화해야합니다. 참조 내가 시스템 무결성 보호 (SIP)을 해제하려면 어떻게해야 [...] .

위의 편집은 sshd가 IPV4를 통해서만 수신하도록합니다.

로 변경 한 후 ssh.plist파일을 다음과 같이 다시로드해야합니다.

sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist

사용합니다 launchctl stop ...launchctl start ...이 파일을 다시로드되지 않습니다.

이 링크를 입력 man launchd.plist하거나 사용하여 자세한 정보가있는 매뉴얼 페이지를 찾을 수 있습니다 .


3
@Yar launchd.plist는 설명서의 이름입니다. 변경 사항은 / System / Library / LaunchDaemons
Martijn Pieters

1
머신을 다시 시작하거나 launchctl을 사용하여 ssh 서비스를 다시 시작해야합니다.
Danny Staple

5
Grr ... OS X (이 경우 요세미티)의 모든 업그레이드는이 변경 사항을 버리고 마지막으로 수정 한 시간 과이 정보를 찾은 위치를 기억해야합니다. 수정 해 주셔서 감사합니다!
Michael

2
@Hassan 두 개의 ssh 인스턴스를 시작해야합니다. 즉, 다른 SockServiceName 이름과 값을 가진 다른 리스너 추가
drAlberT

5
El Capitan 버전 (및 향후 버전에서도)에서 파일을 편집하기 전에 SIP (System Integrity Protection)를 비활성화해야합니다. apple.stackexchange.com/a/208481
jcfrei

17

sshd가 추가 포트에서 청취하도록하려면 소켓 사전에 여러 항목을 추가 할 수 있습니다.

예:

<key>Sockets</key>
<dict>
        <key>Listeners</key>
        <dict>
                <key>SockServiceName</key>
                <string>ssh</string>
                <key>Bonjour</key>
                <array>
                        <string>ssh</string>
                        <string>sftp-ssh</string>
                </array>
        </dict>
        <key>Listeners2</key>
        <dict>
                <key>SockServiceName</key>
                <string>22022</string>
        </dict>
</dict>

1
명확성을 위해 @Raim은 다음을 언급합니다./System/Library/LaunchDaemons/ssh.plist
Mike Causer

Bonjour 키의 목적은 무엇입니까?

저도 알고 싶습니다. Bonjour 키의 목적은 무엇입니까?
Drew

도대체 20022는 무엇인가?
Jamie Hutber 2016 년

1
Bonjour 키의 목적 : 이 선택적 키는 Bonjour 하위 시스템에 서비스를 등록하도록 요청하는 데 사용할 수 있습니다. 에 따르면 man launchd.plist.
스콧 윌리 케

6

지금까지 읽은 경험에서 사용할 수있는 세 가지 주요 방법이 있습니다.

  1. ssh.plist 파일에서 설정을 변경하십시오.
  2. / etc / services 파일에서 설정을 변경하십시오.
  3. /etc/sshd.conf 파일에서 설정을 변경하십시오.

Mac OS X 시스템 파일을 어지럽히 지 않기 위해 socat을 사용하여 포트 22를 원하는 포트로 리디렉션하는 것입니다.

  1. socat 다운로드 : http://www.dest-unreach.org/socat/download/socat-1.7.3.2.tar.gz
  2. tar.gz 파일을 / usr / local / 디렉토리 ( sudo mv ./socat-1.7.3.2.tar.gz /usr/local/bin/socat-1.7.3.2.tar.gz)로 이동하십시오
  3. / usr / local / bin 디렉토리로 이동하십시오 ( cd /usr/local/bin)
  4. 압축 해제 : sudo tar -xvzf socat-1.7.3.2.tar.gz
  5. 압축되지 않은 파일 디렉토리로 이동하십시오. cd ./socat-1.7.3.2
  6. 일반적인 구성을 실행하고 설치하여 socat을 설치하십시오 ( sudo ./configure && sudo make && sudo make install).
  7. Socat 호출 ( sudo socat TCP-LISTEN:2222,reuseaddr,fork TCP:localhost:22) 을 보내 올바른 옵션을 사용하여 포트 22 (기본값 ssh)를 원하는 포트 (예 : 2222)로 리디렉션하십시오.

완료되었으며 mac OS x 시스템 파일은 변경되지 않습니다. 또한이 방법은 Snow Leopard뿐만 아니라 모든 버전의 Mac OS X 및 socat이 실행될 수있는 모든 컴퓨터에서도 작동합니다.

라우터 / 방화벽을 사용하는 경우 마지막으로해야 할 일은 라우터 / 방화벽에 올바른 리디렉션 명령을 포함시키는 것입니다.

또한 ssh.plist 메소드, 서비스 메소드 또는 기타 메소드가 다른 것보다 낫거나 우아하거나 나쁘 든 토론에 빠지지 않습니다.

컴퓨터를 다시 시작할 때마다 socat 리디렉션을 다시 빌드하기 위해 시작할 때 실행되는 스크립트를 쉽게 준비 할 수도 있습니다. 이것을 다음에 배치하십시오 /Library/LaunchDaemons/com.serverfault.sshdredirect.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.serverfault.sshdredirect</string>
    <key>KeepAlive</key>
    <dict>
        <key>NetworkState</key>
        <true/>
    </dict>
    <key>RunAtLoad</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/socat</string>
        <string>TCP-LISTEN:2222,reuseaddr,fork</string>
        <string>TCP:localhost:22</string>
    </array>
</dict>
</plist>

sudo launchctl load -w /Library/LaunchDaemons/com.serverfault.sshdredirect.plist로드 할 때 사용하십시오 . 나중에 다시 부팅 할 때 자동으로로드됩니다.

또한 (i) 루프백 (127.0.0.1) 이외의 다른 인터페이스에서 포트 22에 대한 연결을 차단하도록 방화벽을 설정하고 (ii) sshd.conf 파일을 다음과 같이 변경하여 보안을 향상시킬 수 있습니다. ssh가 루프백에서만 청취하도록하십시오.

즐겨.


2
/etc/services파일을 편집 하는 것은 나쁜 생각입니다. github 또는 bitbucket 계정에 대한 SSH 키 로그인과 같은 것에 영향을 미쳐 새 포트에 연결하여 실패합니다.
ccpizza

1
스크래치 디렉토리에 빌드해야합니다. 그런 다음 sudo설치에 사용하십시오 . 높은 권한으로 구축해서는 안됩니다.

이것은 SIP가 /System/Library/LaunchDaemons/ssh.plist를 변경하기 어려운 El Capitan에서도 작동합니다. 그러나 El Capitan에서는 "NetworkState"키가 더 이상 사용되지 않습니다. 나는 제안한다 <key>KeepAlive</key><true/>.
RTS-Monica Cellio에 대해 읽습니다

최신 osx sierra를 사용하면 작업 버전은 다음과 같습니다. gist.github.com/shanmuha/d97e9f1abdaf1c9b804f748f332a3ffd
Shanmu

1

맨 페이지의 어느 곳에서 나이 문서를 제대로 볼 수는 없지만 추가 리스너를 추가하는 것 이상을 수행하지 않으려면 리스너 배열을 사용하고 추가 dict를 가질 수 있습니다. 포트를 직접 사용하는 경우 / etc / services를 편집 할 필요는 없습니다 (하지만 방화벽에서 포트를 열어야합니다!)

    <key>Listeners</key>
    <array>
    <dict>
        <key>Bonjour</key>
        <array>
            <string>ssh</string>
            <string>sftp-ssh</string>
        </array>
        <key>SockServiceName</key>
        <string>ssh</string>
    </dict>
    <dict>
        <key>SockServiceName</key>
        <string>22222</string>
    </dict>
    </array>

1
Bonjour 키의 목적은 무엇입니까?

@ jww 나는 이것이 다른 청취자로부터 이것을 함께 붙일 때의 복사 붙여 넣기 오류라고 생각합니다.
Adam Prescott

저도 알고 싶습니다. Bonjour 키의 목적은 무엇입니까?
Drew

1
Bonjour 키의 목적 : 이 선택적 키는 Bonjour 하위 시스템에 서비스를 등록하도록 요청하는 데 사용할 수 있습니다. 에 따르면 man launchd.plist.
스콧 윌리 케
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.