Skip to content

Commit c8ddb55

Browse files
committed
Automatically install SSH host keys for public regions
1 parent a617b6c commit c8ddb55

File tree

6 files changed

+135
-4
lines changed

6 files changed

+135
-4
lines changed

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
}
6767
},
6868
"scripts": {
69-
"update-countries": "php scripts/update-countries.php"
69+
"update-countries": "php scripts/update-countries.php",
70+
"update-known-hosts": "php scripts/update-known-hosts.php"
7071
}
7172
}

resources/ssh-known-hosts/hosts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
git.au-2.platform.sh ssh.au-2.platform.sh git.au.platform.sh ssh.au.platform.sh git.ca-1.platform.sh ssh.ca-1.platform.sh git.de-2.platform.sh ssh.de-2.platform.sh git.eu-2.platform.sh ssh.eu-2.platform.sh git.eu-4.platform.sh ssh.eu-4.platform.sh git.eu-5.platform.sh ssh.eu-5.platform.sh git.eu.platform.sh ssh.eu.platform.sh git.fr-3.platform.sh ssh.fr-3.platform.sh git.fr-4.platform.sh ssh.fr-4.platform.sh git.uk-1.platform.sh ssh.uk-1.platform.sh git.us-2.platform.sh ssh.us-2.platform.sh git.us-3.platform.sh ssh.us-3.platform.sh git.us-4.platform.sh ssh.us-4.platform.sh git.us.platform.sh ssh.us.platform.sh

resources/ssh-known-hosts/keys

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
git.au-2.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3GhkAUQ/+wx9oBekSKqCIQZqKBh4MaqrdguK0poqwEBMzbKGo5WtQSwN2nx0RWDNTJFJ0ipaC9XszJBc53O+cNncvj9OyFNh9zBclxRFt1bgAs+upORs5GXAaA2Xzfx6VCfBLG/uN65etZLV+klP9yAqgyRjOQqJG8IUejeuGb+TA+aXBupm1SHIffqQm/TMLqdfKn5Uz9MkVXYfkVMM2oQyVRvAKsqS9DiZs/kkubBhetaAt03lpjXm69jm9rCusw/GTODwd3LESzPe9fl38wkVbTJ9M9ia+5bxZMbF0oScNeV0CpQ0VU34dv9prGSlekVM7i6Ww06Cn9QEtTIhX
2+
ssh.au-2.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3GhkAUQ/+wx9oBekSKqCIQZqKBh4MaqrdguK0poqwEBMzbKGo5WtQSwN2nx0RWDNTJFJ0ipaC9XszJBc53O+cNncvj9OyFNh9zBclxRFt1bgAs+upORs5GXAaA2Xzfx6VCfBLG/uN65etZLV+klP9yAqgyRjOQqJG8IUejeuGb+TA+aXBupm1SHIffqQm/TMLqdfKn5Uz9MkVXYfkVMM2oQyVRvAKsqS9DiZs/kkubBhetaAt03lpjXm69jm9rCusw/GTODwd3LESzPe9fl38wkVbTJ9M9ia+5bxZMbF0oScNeV0CpQ0VU34dv9prGSlekVM7i6Ww06Cn9QEtTIhX
3+
git.au.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNswNEfbW/j3/mIuMVU10lWFSxYDcoqUPaAWqsr76oMsHkRRrwGIbN3ckDbq7rga2AXi2eYgPrukZLODlRuJb91aE2BWBYnQ4pe1JQ0vjdEbZ5QiBqmJu7dU/OdGwYce0DEnDVR3LSPBfvIzXAdqzwW5tJsEAlEoaF+s8VhcjSCCZoqEtovfJCdvPoG9oz03GYX3/2yMJM8OJ/VCBnivxFJKfTMGAkPzNEmOhcuK+knhJLW/Tmxh36rQTh3uuxZNrNs3Ol3jzl/h95Qpd+pDyx4LOReno+tOjIpSm8ets7AjW6XetiGpqjBuVPoAzwN9ESzogrexP7JmQ2KI5asxjt
4+
ssh.au.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNswNEfbW/j3/mIuMVU10lWFSxYDcoqUPaAWqsr76oMsHkRRrwGIbN3ckDbq7rga2AXi2eYgPrukZLODlRuJb91aE2BWBYnQ4pe1JQ0vjdEbZ5QiBqmJu7dU/OdGwYce0DEnDVR3LSPBfvIzXAdqzwW5tJsEAlEoaF+s8VhcjSCCZoqEtovfJCdvPoG9oz03GYX3/2yMJM8OJ/VCBnivxFJKfTMGAkPzNEmOhcuK+knhJLW/Tmxh36rQTh3uuxZNrNs3Ol3jzl/h95Qpd+pDyx4LOReno+tOjIpSm8ets7AjW6XetiGpqjBuVPoAzwN9ESzogrexP7JmQ2KI5asxjt
5+
git.ca-1.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGJxvHwSRPQVF0b2rFcmJ4e9GSDZVpdDs61kSpXrX2qnzK9dcRa8xwsa28z2uzzZfBXLrJyLCDwWd0iv2VpbZ5Bh9EY9Hxf38PzUzaSzP7kasiVN02UeDCE3X7jYyxkT1wvDbnafl31Hurra5KH8Oo06ThxJvj3hPS1xkTXuoquEx5AKWo4yLgoEEWePxwQjrsCcRJbiel0P9gZh4mohSK7Bku/UnmU/wTa1G+IjecBej2YHwjdfBCF9iRtMcofHy0S/YNuyAzNrJVMGayEh0eq6QKuS5rWntExxSvj8dU3/TBW+zv88lRhvueN44orUjMO2mfQoMbtOkbHH4yZ1LT
6+
ssh.ca-1.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGJxvHwSRPQVF0b2rFcmJ4e9GSDZVpdDs61kSpXrX2qnzK9dcRa8xwsa28z2uzzZfBXLrJyLCDwWd0iv2VpbZ5Bh9EY9Hxf38PzUzaSzP7kasiVN02UeDCE3X7jYyxkT1wvDbnafl31Hurra5KH8Oo06ThxJvj3hPS1xkTXuoquEx5AKWo4yLgoEEWePxwQjrsCcRJbiel0P9gZh4mohSK7Bku/UnmU/wTa1G+IjecBej2YHwjdfBCF9iRtMcofHy0S/YNuyAzNrJVMGayEh0eq6QKuS5rWntExxSvj8dU3/TBW+zv88lRhvueN44orUjMO2mfQoMbtOkbHH4yZ1LT
7+
git.de-2.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCy8x0JUpNurMQZzxyOKy3PSlly5SIUuqgZHUoQ7UlD/dLdienrs5gLGz3+N3asrX6O1AB8zef3VN6YiQ2VNXXlMu9WNV1mDUfXVxq5S8/mwWkdImK67vwFrLPU5tlZOVt2dB01LqZSLrWhKSRVw3bTD/Q2MiSesBIKFFWfRvTRZOpRrg/xF44KnA50QXwpvm34DTdQf6UwuywKPu6quBfYUUd6RYbdeTwmSSn/d3UCdrS9bi8kGPzwRSZ6OXyQNihETZrw095XPVXOl/MbC4mPjyqj4rkcVbevAPkhnQqVI/XJJAVdaDzRbzRP0U2o/eoAW37BIQya+QC/5jgi2R0N
8+
ssh.de-2.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCy8x0JUpNurMQZzxyOKy3PSlly5SIUuqgZHUoQ7UlD/dLdienrs5gLGz3+N3asrX6O1AB8zef3VN6YiQ2VNXXlMu9WNV1mDUfXVxq5S8/mwWkdImK67vwFrLPU5tlZOVt2dB01LqZSLrWhKSRVw3bTD/Q2MiSesBIKFFWfRvTRZOpRrg/xF44KnA50QXwpvm34DTdQf6UwuywKPu6quBfYUUd6RYbdeTwmSSn/d3UCdrS9bi8kGPzwRSZ6OXyQNihETZrw095XPVXOl/MbC4mPjyqj4rkcVbevAPkhnQqVI/XJJAVdaDzRbzRP0U2o/eoAW37BIQya+QC/5jgi2R0N
9+
git.eu-2.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFKM3dQWu2/aCXDhZVSSHEQskK+6pN+snPS7XSfd9TgbmhUKYhp22bHsA/YAiUh/V1CB/hsGQLByvPNt/J0lRAn8in6VoCOad6NRZErs315FsmiU2jH+bcS4imKj3ayje81cn9qJPJpe5Jg6YIqz00l/XjUiz58ehFJE+xkqiKmZ46uVKH9z6jC46WQj5ia4tZYGpF5l0fAzfzq7IXhz8PLGfrDYJt5O28I1CerJ8tCX2zdOJ9I/urNuZ/FlnijDtZq3LP6/lmWOXoxOFaDKHhCwaRnlgonMskIZgnh5wOxi5QqLpZ+D0KX3x8iDVO1bstf/HKrOPSen0i8QQyj+Bd
10+
ssh.eu-2.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFKM3dQWu2/aCXDhZVSSHEQskK+6pN+snPS7XSfd9TgbmhUKYhp22bHsA/YAiUh/V1CB/hsGQLByvPNt/J0lRAn8in6VoCOad6NRZErs315FsmiU2jH+bcS4imKj3ayje81cn9qJPJpe5Jg6YIqz00l/XjUiz58ehFJE+xkqiKmZ46uVKH9z6jC46WQj5ia4tZYGpF5l0fAzfzq7IXhz8PLGfrDYJt5O28I1CerJ8tCX2zdOJ9I/urNuZ/FlnijDtZq3LP6/lmWOXoxOFaDKHhCwaRnlgonMskIZgnh5wOxi5QqLpZ+D0KX3x8iDVO1bstf/HKrOPSen0i8QQyj+Bd
11+
git.eu-4.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKIClyq/OHY6u+tlG+LXVwdcMsOGNG1UTOYuYrdCx4CBPiHbdZkizhFFDiJD4pTTtISW7zuiKGWiYmqznwDfeZ2jfEH4NjCyhsMqFWgJ/MwIQDZJGZAGMj9QXEJpCIVyb4D7n1VuKlt0W1KLL4C/a0E7tTU9+1bF38lyhO/QvRNNJD1fgYeZse75stVqftNmp6HA2JIvcQolH1afMSyi0c0CgCPL97nC+qYBOCRd+vtGP/5q5GT9KHENlIcmciu7r23NtIo5U2ytqnKtgnDkngpLTWgPXlepr+VIBSfy1XnoC+gW8uJ6TtF6+L1yz4NrsvBqTJfcdG6318xQ7Hnwz5
12+
ssh.eu-4.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDKIClyq/OHY6u+tlG+LXVwdcMsOGNG1UTOYuYrdCx4CBPiHbdZkizhFFDiJD4pTTtISW7zuiKGWiYmqznwDfeZ2jfEH4NjCyhsMqFWgJ/MwIQDZJGZAGMj9QXEJpCIVyb4D7n1VuKlt0W1KLL4C/a0E7tTU9+1bF38lyhO/QvRNNJD1fgYeZse75stVqftNmp6HA2JIvcQolH1afMSyi0c0CgCPL97nC+qYBOCRd+vtGP/5q5GT9KHENlIcmciu7r23NtIo5U2ytqnKtgnDkngpLTWgPXlepr+VIBSfy1XnoC+gW8uJ6TtF6+L1yz4NrsvBqTJfcdG6318xQ7Hnwz5
13+
git.eu-5.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHVvr73G2u1j0s0RqixwpIGsTKagv3vMErXj/ixorbbuuNFmln8l2OqLo9cvg6QmO8OJFpY1xdOAIQ1hfzcZud+LCdMAxvsC7lz9VMb26Vchuc7o+lq0+w8ORAlKqlFfl2MpLtbEuuRaellXaTlQ36cSKwuCHOfzqsKDyb+Umpm+bYk6ICLnJyiEldo1cs8cAQNIgXRmPiJ2Ws/OamfJi/b1CajNZr6Q3gs7oqRbWBt9mgDFU9sFDMWDmmBAvDQj2azSk2i1hFQ4/lzczt6vQH9vusnESPCJfAiMJb60868BhuvOV9oxITItzwgNDFJltL8LNadZ4x6VvMmPV0DpJb
14+
ssh.eu-5.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHVvr73G2u1j0s0RqixwpIGsTKagv3vMErXj/ixorbbuuNFmln8l2OqLo9cvg6QmO8OJFpY1xdOAIQ1hfzcZud+LCdMAxvsC7lz9VMb26Vchuc7o+lq0+w8ORAlKqlFfl2MpLtbEuuRaellXaTlQ36cSKwuCHOfzqsKDyb+Umpm+bYk6ICLnJyiEldo1cs8cAQNIgXRmPiJ2Ws/OamfJi/b1CajNZr6Q3gs7oqRbWBt9mgDFU9sFDMWDmmBAvDQj2azSk2i1hFQ4/lzczt6vQH9vusnESPCJfAiMJb60868BhuvOV9oxITItzwgNDFJltL8LNadZ4x6VvMmPV0DpJb
15+
git.eu.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDo0sNDnrxZ4N0UEFhdgYmX5htjsY/XnG4aJImgCaqGhO6/ijj5kK+MLkHXGsekVWWIe69egMsXFII5Kj354Os4R7615CJfcxoq46W/kIkDwI2wAIh1dtJ/hfA0woE5T3ydETY+SflE0KwgPVesy8jznL8TuJ4/YF4nSgKg9RtPqxDz+7VnjEPMHilGVGqR1qHYDve8Y3jQDZW+1X6vCIhWrxmgQ0h0aq8oaA/Em2zAi7OQZVym02tnibnSU13AcRCHZ3hmecZuoqRxFUssUs+tmlHGZ1Fh7GQ8yXqjeFLevjEcIPSjo4zYG9Eg34tOeRSGj9wp88w+Miw70rxw0mwz
16+
ssh.eu.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDo0sNDnrxZ4N0UEFhdgYmX5htjsY/XnG4aJImgCaqGhO6/ijj5kK+MLkHXGsekVWWIe69egMsXFII5Kj354Os4R7615CJfcxoq46W/kIkDwI2wAIh1dtJ/hfA0woE5T3ydETY+SflE0KwgPVesy8jznL8TuJ4/YF4nSgKg9RtPqxDz+7VnjEPMHilGVGqR1qHYDve8Y3jQDZW+1X6vCIhWrxmgQ0h0aq8oaA/Em2zAi7OQZVym02tnibnSU13AcRCHZ3hmecZuoqRxFUssUs+tmlHGZ1Fh7GQ8yXqjeFLevjEcIPSjo4zYG9Eg34tOeRSGj9wp88w+Miw70rxw0mwz
17+
git.fr-3.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD0ipGEbPJDcd2lHcdzlEf5f7Si6HMl0i+Pj5g9tbbDNL2DwVrNBmfhGp26mYemWSHbj1hH0qn2vEZaXLG46uPcR4Nu126vNZ/MLBnuh13K3yCxE7wyjAT2B7aNgCKsIiaQpsT1ciZz42Qes1DRqA2r4PIsV97EAP6/k7atPF7wcO2A4CaVzP6na/CyswS5Gq2N2fUU6xOKcOGtAnNHEFptz4CBdbv7seo1Ac7QbN0Ks9+Vq+QaEPYymR8WdHa1HIDh5ZrHc8DTXatuUz1c1E0u5gnFpLsNkuJ5/ndv1lgTgNDcn2STCEaKvvRKgjGiQ0Chrdj3VVTt4Gt77qgvPb4N
18+
ssh.fr-3.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD0ipGEbPJDcd2lHcdzlEf5f7Si6HMl0i+Pj5g9tbbDNL2DwVrNBmfhGp26mYemWSHbj1hH0qn2vEZaXLG46uPcR4Nu126vNZ/MLBnuh13K3yCxE7wyjAT2B7aNgCKsIiaQpsT1ciZz42Qes1DRqA2r4PIsV97EAP6/k7atPF7wcO2A4CaVzP6na/CyswS5Gq2N2fUU6xOKcOGtAnNHEFptz4CBdbv7seo1Ac7QbN0Ks9+Vq+QaEPYymR8WdHa1HIDh5ZrHc8DTXatuUz1c1E0u5gnFpLsNkuJ5/ndv1lgTgNDcn2STCEaKvvRKgjGiQ0Chrdj3VVTt4Gt77qgvPb4N
19+
git.fr-4.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvCpjQnnCR6VDXTL/neY5wqIe7Z1OUSxdLMqDCGpkDSLTN7I9Jj8MvMR1A0nuehwRpV1kHFJ4HryPyFGvR9BSFib4VZ1cd51iTSbphDkpbp3E7ukNzqV445+iPEwRPNDzJFKL3z/C7RR9ss6crP5h1Cn/qQaxjVTZry+zmv0IgSIkb3ipCN6QL6nXUOsabk4YB4YiVUlQWSNizWNn5cFOvby7DCd/lzlOz2zR7fgD2Cjbzs+2uz832r2wb2CnsVMAdGOs/MnlPy7RS16h6wa8M10UxJztTESdJ8zj1qbToPQyKHILpSSX3+E2wrrdVJ3OeG2skwElp/EhHAjcv7C65
20+
ssh.fr-4.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvCpjQnnCR6VDXTL/neY5wqIe7Z1OUSxdLMqDCGpkDSLTN7I9Jj8MvMR1A0nuehwRpV1kHFJ4HryPyFGvR9BSFib4VZ1cd51iTSbphDkpbp3E7ukNzqV445+iPEwRPNDzJFKL3z/C7RR9ss6crP5h1Cn/qQaxjVTZry+zmv0IgSIkb3ipCN6QL6nXUOsabk4YB4YiVUlQWSNizWNn5cFOvby7DCd/lzlOz2zR7fgD2Cjbzs+2uz832r2wb2CnsVMAdGOs/MnlPy7RS16h6wa8M10UxJztTESdJ8zj1qbToPQyKHILpSSX3+E2wrrdVJ3OeG2skwElp/EhHAjcv7C65
21+
git.uk-1.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+zGy0b99QbRYBuHtym0jEMMZXo/E8WYYcp9ua7I7p2KOzBKoze7udHMB2tRVC4RTrSPeiMoN59Qjl8JgN5/qVW7TUOyotcftYVNm0YUpv8gWlXxnnJxxHghkWrOVBEl773t0att6da2LKsoJ2hWR9ICivcX1f1cnhLyBl4SHTHnlyl6Pp+ZrB2n/KD5z9duQTZ9d6OdUaJ9GJ181HAypH7+CWq6NHejDdX/sMQrIkpe79fx5wrhUMUu/UxDcmupBwn3Xg01BoHvxz+GRg/hbEH+J/6IYH/ZyMqUbo+iav7xILw76Q0dA/nbMWVmhfucAC+UVI0dehH+KI2qqsqMFJ
22+
ssh.uk-1.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+zGy0b99QbRYBuHtym0jEMMZXo/E8WYYcp9ua7I7p2KOzBKoze7udHMB2tRVC4RTrSPeiMoN59Qjl8JgN5/qVW7TUOyotcftYVNm0YUpv8gWlXxnnJxxHghkWrOVBEl773t0att6da2LKsoJ2hWR9ICivcX1f1cnhLyBl4SHTHnlyl6Pp+ZrB2n/KD5z9duQTZ9d6OdUaJ9GJ181HAypH7+CWq6NHejDdX/sMQrIkpe79fx5wrhUMUu/UxDcmupBwn3Xg01BoHvxz+GRg/hbEH+J/6IYH/ZyMqUbo+iav7xILw76Q0dA/nbMWVmhfucAC+UVI0dehH+KI2qqsqMFJ
23+
git.us-2.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDM1ZokfNnDwh/eoLazPQ9X0A4y2Ypht9DgKu3P7Rh1R7GvXInb8aDmGhJV0ynmGFPtmI109IdltFUfY9q91lwPxu0+8PFxcZjziWAgk+/qXJ4XO/vj0fa3ziwA4uQU2WGRoBjrJ9aCor71pdOnMzNAc0vTuBI/GRbxPwYJkfrNBBp9fNKhddrEujKSYylobhClAwA8PUK74ptCnk1G9utd0WBeQ6Oe4f24Okv1qm3htZ54Prfpo6l82xNCR+1b5crP3fzYlqSvwC5OKthKOgBYvxVwi/FfT+hGrus3EQbezUEh3KevnEq0a9iCpmNuVehSsi3ikfPJql2sNBPkRwmN
24+
ssh.us-2.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDM1ZokfNnDwh/eoLazPQ9X0A4y2Ypht9DgKu3P7Rh1R7GvXInb8aDmGhJV0ynmGFPtmI109IdltFUfY9q91lwPxu0+8PFxcZjziWAgk+/qXJ4XO/vj0fa3ziwA4uQU2WGRoBjrJ9aCor71pdOnMzNAc0vTuBI/GRbxPwYJkfrNBBp9fNKhddrEujKSYylobhClAwA8PUK74ptCnk1G9utd0WBeQ6Oe4f24Okv1qm3htZ54Prfpo6l82xNCR+1b5crP3fzYlqSvwC5OKthKOgBYvxVwi/FfT+hGrus3EQbezUEh3KevnEq0a9iCpmNuVehSsi3ikfPJql2sNBPkRwmN
25+
git.us-3.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLFxThoz62qBwaVmuJxG2jC+t+7Z44IvX7fYOl3cYoo/CNrvQuXnr+T6HyPtxOX75k8gPlKfrGVclEK3v0RoPX9BgQqHeS4d//lIqnhARccaWJVnjwc2f8fK/QKhDE45pmL/jSnMyiwDp32aOKt8CpZUqBI94lBhbsKcl+ud4U8zJ8nyV2CgE5PYB3GGpSxARM3fckhfrOevkAaTGtNBNE9myVVevuA5cgx6nQtovE5ewuWUML1XTWqhCtFyrweX2naqQ99gTZj1u5eg+WgttsGbiMw8SJ1942A04+Jq7vgNuJDnTV7EKiguS5QVZPmgiQEsiOrRWKvF9IniG3Bsp5
26+
ssh.us-3.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLFxThoz62qBwaVmuJxG2jC+t+7Z44IvX7fYOl3cYoo/CNrvQuXnr+T6HyPtxOX75k8gPlKfrGVclEK3v0RoPX9BgQqHeS4d//lIqnhARccaWJVnjwc2f8fK/QKhDE45pmL/jSnMyiwDp32aOKt8CpZUqBI94lBhbsKcl+ud4U8zJ8nyV2CgE5PYB3GGpSxARM3fckhfrOevkAaTGtNBNE9myVVevuA5cgx6nQtovE5ewuWUML1XTWqhCtFyrweX2naqQ99gTZj1u5eg+WgttsGbiMw8SJ1942A04+Jq7vgNuJDnTV7EKiguS5QVZPmgiQEsiOrRWKvF9IniG3Bsp5
27+
git.us-4.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDORGcfHsCq33DvSQjoElzb3KzD9FU/epQ5c0DuOUJzpMx4fOERSxifyfn6GKcl59hEqq4FErttq+hqWyzuifWhpAFWSC4oLveXpkOXUFqkT31hUt7h6VLTSQfOOgp5d3exYuU3XQAuJDFYtVtO+EwMK37exC+1VUrDnXO1N7C3wU+KCfqRvudnXG8jnOQWY5GAeyLa08oJgwiFsgKKrNbulmEzOCL0N7/TAX0enLV5SLsD98Y1a7ARm1fqM1LuiMMExneD5TuRU+5J33kkCMlf/6JvYm52ppacM0+f1QDAbuKjqAM68ntRHAeQuL42Y9LWDbdYl9Slq3Z7tqzmy23n
28+
ssh.us-4.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDORGcfHsCq33DvSQjoElzb3KzD9FU/epQ5c0DuOUJzpMx4fOERSxifyfn6GKcl59hEqq4FErttq+hqWyzuifWhpAFWSC4oLveXpkOXUFqkT31hUt7h6VLTSQfOOgp5d3exYuU3XQAuJDFYtVtO+EwMK37exC+1VUrDnXO1N7C3wU+KCfqRvudnXG8jnOQWY5GAeyLa08oJgwiFsgKKrNbulmEzOCL0N7/TAX0enLV5SLsD98Y1a7ARm1fqM1LuiMMExneD5TuRU+5J33kkCMlf/6JvYm52ppacM0+f1QDAbuKjqAM68ntRHAeQuL42Y9LWDbdYl9Slq3Z7tqzmy23n
29+
git.us.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTrolLNSsqP9rtd7NDiH0D7mwIuSJYBx3HxLv/84PFrEPJE0nXlbYpa0dMdo38ZFUaJw05nXfh7y1OSuKHw1ohfsmUT6cA+F13fbMyXBRKG69TNuHBt3cvSQ3HngSyZ3P9TXj7UyuCK2eDYiiUrsrBmZM7WQD/lsE63/PufOCQk3BwIS/xT+ZNiaXHRZBHR70cQcn8Nn3FfDrtf/WRtcytgm/8A8rd4YWyJsmhDUlS7j/8oP7DcB0yPNq1QGuEJPF0zQGiXd/ySbaaZPvEyMbW+mvox7rxgUViIqGw3s5ys1nFCmd/SYCJrfC1i+q4z13n7RkfMBaNBc0eufT2WHeJ
30+
ssh.us.platform.sh ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTrolLNSsqP9rtd7NDiH0D7mwIuSJYBx3HxLv/84PFrEPJE0nXlbYpa0dMdo38ZFUaJw05nXfh7y1OSuKHw1ohfsmUT6cA+F13fbMyXBRKG69TNuHBt3cvSQ3HngSyZ3P9TXj7UyuCK2eDYiiUrsrBmZM7WQD/lsE63/PufOCQk3BwIS/xT+ZNiaXHRZBHR70cQcn8Nn3FfDrtf/WRtcytgm/8A8rd4YWyJsmhDUlS7j/8oP7DcB0yPNq1QGuEJPF0zQGiXd/ySbaaZPvEyMbW+mvox7rxgUViIqGw3s5ys1nFCmd/SYCJrfC1i+q4z13n7RkfMBaNBc0eufT2WHeJ

scripts/update-known-hosts.php

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#!/usr/bin/env php
2+
<?php
3+
/**
4+
* @file
5+
* Fetches SSH host keys for Platform.sh public regions.
6+
*/
7+
8+
use Platformsh\Cli\Service\Api;
9+
use Platformsh\Cli\Util\Sort;
10+
use Symfony\Component\Console\Output\ConsoleOutput;
11+
use Symfony\Component\Filesystem\Filesystem;
12+
use Symfony\Component\Process\Process;
13+
14+
require dirname(__DIR__) . '/vendor/autoload.php';
15+
16+
$cliCommand = 'platform';
17+
18+
$output = new ConsoleOutput();
19+
$stdErr = $output->getErrorOutput();
20+
$api = new Api(null, null, $output);
21+
22+
$stdErr->writeln('Fetching the list of regions from the API...');
23+
$regions = $api->getClient()->getRegions();
24+
25+
$regionDomains = [];
26+
foreach ($regions as $region) {
27+
if ($region->private) {
28+
continue;
29+
}
30+
$domain = \parse_url($region->endpoint, PHP_URL_HOST);
31+
if (!$domain) {
32+
$stdErr->writeln("Failed to parse hostname for region: " . $region['id']);
33+
continue;
34+
}
35+
$regionDomains[] = $domain;
36+
}
37+
38+
$stdErr->writeln(\count($regionDomains) . ' region domain(s) found');
39+
40+
$scanners = [];
41+
foreach ($regionDomains as $regionDomain) {
42+
foreach (['git.', 'ssh.'] as $prefix) {
43+
$proc = new Process(['ssh-keyscan', $prefix . $regionDomain]);
44+
$proc->start();
45+
$scanners[$prefix . $regionDomain] = $proc;
46+
}
47+
}
48+
49+
$stdErr->writeln(\count($scanners) . ' ssh-keyscan processes started');
50+
51+
$scannedHosts = [];
52+
while (count($scanners)) {
53+
foreach ($scanners as $host => $scanner) {
54+
if (!$scanner->isRunning()) {
55+
if ($scanner->isSuccessful()) {
56+
$stdErr->writeln('Scanned host ' . $host);
57+
$scannedHosts[$host] = trim($scanner->getOutput());
58+
} else {
59+
$stdErr->writeln(sprintf('Failed to scan host %s: %s', $host, $scanner->getErrorOutput()));
60+
}
61+
unset($scanners[$host]);
62+
}
63+
}
64+
usleep(300000);
65+
}
66+
67+
\uksort($scannedHosts, [Sort::class, 'compareDomains']);
68+
69+
$fs = new Filesystem();
70+
71+
$keys_filename = dirname(__DIR__) . '/resources/ssh-known-hosts/keys';
72+
$hosts_filename = dirname(__DIR__) . '/resources/ssh-known-hosts/hosts';
73+
$fs->dumpFile($keys_filename, implode("\n", array_values($scannedHosts)) . "\n");
74+
$stdErr->writeln(sprintf('Written to file: <info>%s</info>', $keys_filename));
75+
$fs->dumpFile($hosts_filename, implode(' ', array_keys($scannedHosts)) . "\n");
76+
$stdErr->writeln(sprintf('Written to file: <info>%s</info>', $hosts_filename));

src/Command/Self/SelfBuildCommand.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ protected function execute(InputInterface $input, OutputInterface $output)
120120
], CLI_ROOT, true, false);
121121
}
122122

123+
// Run Composer build scripts.
124+
$shell->execute(['composer', 'run', 'update-known-hosts'], CLI_ROOT, true, false);
125+
123126
$boxArgs = [CLI_ROOT . '/vendor/bin/box', 'compile', '--no-interaction'];
124127
if ($output->isVeryVerbose()) {
125128
$boxArgs[] = '-vvv';

src/Service/SshConfig.php

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,26 @@ public function configureSessionSsh()
4545
$this->fs->remove($legacy);
4646
}
4747

48+
// Install host keys.
49+
$host_keys_file = CLI_ROOT . '/resources/ssh-known-hosts/keys';
50+
$host_names_file = CLI_ROOT . '/resources/ssh-known-hosts/hosts';
51+
if (file_exists($host_keys_file) && file_exists($host_names_file)) {
52+
$keys = file_get_contents($host_keys_file);
53+
$names = str_replace("\n", ' ', trim(file_get_contents($host_names_file)));
54+
$hostsFilename = $this->getCliSshDir() . DIRECTORY_SEPARATOR . 'host-keys';
55+
$hostsConfigFilename = $this->getCliSshDir() . DIRECTORY_SEPARATOR . 'host-keys.config';
56+
if (!empty($names) && !empty($keys)) {
57+
$this->writeSshIncludeFile($hostsFilename, $keys);
58+
$hostsConfigLines[] = 'Host ' . trim(file_get_contents($host_names_file));
59+
$hostsConfigLines[] = ' UserKnownHostsFile ' . $this->formatFilePath($hostsFilename);
60+
$hostsConfigLines[] = 'Host *';
61+
$this->writeSshIncludeFile(
62+
$hostsConfigFilename,
63+
$hostsConfigLines
64+
);
65+
}
66+
}
67+
4868
$domainWildcards = $this->config->get('api.ssh_domain_wildcards');
4969

5070
$lines = [];
@@ -151,17 +171,17 @@ public function formatFilePath($path)
151171
* Creates or updates an SSH config include file.
152172
*
153173
* @param string $filename
154-
* @param array $lines
174+
* @param array|string $lines
155175
* @param bool $allowDelete
156176
*/
157-
private function writeSshIncludeFile($filename, array $lines, $allowDelete = true)
177+
private function writeSshIncludeFile($filename, $lines, $allowDelete = true)
158178
{
159179
if (empty($lines) && $allowDelete && \file_exists($filename)) {
160180
$this->stdErr->writeln(sprintf('Deleting SSH configuration include file: <info>%s</info>', $filename), OutputInterface::VERBOSITY_VERBOSE);
161181
$this->fs->remove($filename);
162182
return;
163183
}
164-
$contents = implode(PHP_EOL, $lines) . PHP_EOL;
184+
$contents = is_array($lines) ? implode(PHP_EOL, $lines) . PHP_EOL : $lines;
165185
if (!\file_exists($filename)) {
166186
$this->stdErr->writeln(sprintf('Creating SSH configuration include file: <info>%s</info>', $filename), OutputInterface::VERBOSITY_VERBOSE);
167187
$this->fs->writeFile($filename, $contents, false);

0 commit comments

Comments
 (0)