diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh
index cbe08846a2..a6e123a620 100644
--- a/Library/Homebrew/brew.sh
+++ b/Library/Homebrew/brew.sh
@@ -396,8 +396,25 @@ setup_git() {
fi
}
+setup_ssh() {
+ # This is set by the user environment.
+ # shellcheck disable=SC2154
+ HOMEBREW_BREWED_SSH_PATH="${HOMEBREW_PREFIX}/opt/openssh/bin/ssh"
+ if [[ -n "${HOMEBREW_FORCE_BREWED_SSH}" && -x "${HOMEBREW_BREWED_SSH_PATH}" ]] &&
+ "${HOMEBREW_BREWED_SSH_PATH}" -V &>/dev/null
+ then
+ HOMEBREW_SSH="${HOMEBREW_BREWED_SSH_PATH}"
+ elif [[ -n "${HOMEBREW_SSH_PATH}" ]]
+ then
+ HOMEBREW_SSH="${HOMEBREW_SSH_PATH}"
+ else
+ HOMEBREW_SSH="ssh"
+ fi
+}
+
setup_curl
setup_git
+setup_ssh
HOMEBREW_VERSION="$("${HOMEBREW_GIT}" -C "${HOMEBREW_REPOSITORY}" describe --tags --dirty --abbrev=7 2>/dev/null)"
HOMEBREW_USER_AGENT_VERSION="${HOMEBREW_VERSION}"
@@ -795,7 +812,9 @@ setup-analytics
# Use this configuration file instead of ~/.ssh/config when fetching git over SSH.
if [[ -n "${HOMEBREW_SSH_CONFIG_PATH}" ]]
then
- export GIT_SSH_COMMAND="ssh -F${HOMEBREW_SSH_CONFIG_PATH}"
+ export GIT_SSH_COMMAND="${HOMEBREW_SSH} -F${HOMEBREW_SSH_CONFIG_PATH}"
+else
+ export GIT_SSH_COMMAND="${HOMEBREW_SSH}"
fi
if [[ -n "${HOMEBREW_DOCKER_REGISTRY_TOKEN}" ]]
diff --git a/bin/brew b/bin/brew
index 4c06f135a0..1bd34f63d2 100755
--- a/bin/brew
+++ b/bin/brew
@@ -121,6 +121,7 @@ then
http_proxy https_proxy ftp_proxy no_proxy all_proxy HTTPS_PROXY FTP_PROXY ALL_PROXY
GITHUB_ACTIONS GITHUB_WORKSPACE GITHUB_ACTIONS_HOMEBREW_SELF_HOSTED
GITHUB_REPOSITORY GITHUB_RUN_ID GITHUB_SHA GITHUB_HEAD_REF GITHUB_BASE_REF GITHUB_REF
+ GIT_SSH
# TODO: remove the below after a few days
GITHUB_ACTIONS_HOMEBREW_MACOS_SELF_HOSTED
)
diff --git a/docs/Manpage.md b/docs/Manpage.md
index 0b90444e43..22db08fa59 100644
--- a/docs/Manpage.md
+++ b/docs/Manpage.md
@@ -2058,6 +2058,9 @@ example, run `export HOMEBREW_NO_INSECURE_REDIRECT=1` rather than just
- `HOMEBREW_FORCE_BREWED_GIT`
If set, always use a Homebrew-installed `git`(1) rather than the system version. Automatically set if the system version of `git` is too old.
+- `HOMEBREW_FORCE_BREWED_SSH`
+
If set, always use a Homebrew-installed `openssh`(1) rather than the system version.
+
- `HOMEBREW_FORCE_VENDOR_RUBY`
If set, always use Homebrew's vendored, relocatable Ruby version even if the system version of Ruby is new enough.
@@ -2170,6 +2173,11 @@ example, run `export HOMEBREW_NO_INSECURE_REDIRECT=1` rather than just
*Default:* `$HOME/.ssh/config`
+- `HOMEBREW_SSH_PATH`
+
Set this value to a new enough `ssh` executable for Homebrew to use.
+
+ *Default:* `ssh`.
+
- `HOMEBREW_SKIP_OR_LATER_BOTTLES`
If set along with `HOMEBREW_DEVELOPER`, do not use bottles from older versions of macOS. This is useful in development on new macOS versions.